您的位置:首页 > 数据库

数据库性能优化总结

2016-06-01 22:23 288 查看
摘要: 1.数据库性能优化
2.如何使用执行计划来决定是否需要sql优化
3.多表连接的三种方式区别(Hash join, Sort Merge join , Nested Loop)

1.数据库性能优化总结:

对查询进行优化,要尽量避免全表扫描,首先应考虑where及order by涉及的列上建立索引

应尽量避免在where子句中对字段进行null值判断, 否则索引失效而进行全表扫描, 例如:

select id from table where num is null

最好不要给数据库留null, 尽可能的使用not null填充数据库

3.应尽量避免在where子句中使用!= 或者<>操作符, 否则索引失效导致进行全表扫描

4. 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描, 如:

select id from table where num=10 or name='admin'

可以这样查询:

select id from table where num=10
union all
select id from table where name='admin'

5. in 和 not in 也要慎用, 否则会导致全表扫描 如:

select id from table where num in(1,2,3)

对于连续的数值,能用between 就不要用in了

select id from table where num between 1 and 3

6.应尽量避免使用like, 这样会导致全表进行扫描:

select id from table where name like '%abc%'


2.如何使用执行计划来决定是否需要sql优化

前面我们提到了sql优化的常见方法, 那么究竟什么时候我们需要对sql进行优化呢, 通过何种方式来对sql进行优化呢, 下面主要介绍一下执行计划, 执行计划是SQL优化的先决条件,通过执行计划可以更好的找到对SQL性能问题的定位

我们可以通过执行命令

EXPLAIN PLAN FOR SELECT * FROM TABLE;

看下执行后的结果:



解释一下几个参数:

Operation:当前操作的内容

Object_Name: 当前表为city

CARDINALITY:返回的记录数

COST: oracle计算出来的一个数值,用于说明SQL执行的代价

3.多表连接的三种方式区别(Hash join, Merge join , Nested Loop)

下面主要介绍一下这三种连接的使用场景:

Nested loop: 一般用在连接的表中有索引, 并且索引选择性较好的时候

Hash join:散列连接一般是做大数据连接时的常用方式, 一般用于在两个表的数据量差别很大的时候

Sort Merge join: 一般用于在没有索引,并且数据已经排序的情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql优化