数据库性能优化总结
2016-06-01 22:23
288 查看
摘要: 1.数据库性能优化
2.如何使用执行计划来决定是否需要sql优化
3.多表连接的三种方式区别(Hash join, Sort Merge join , Nested Loop)
应尽量避免在where子句中对字段进行null值判断, 否则索引失效而进行全表扫描, 例如:
最好不要给数据库留null, 尽可能的使用not null填充数据库
3.应尽量避免在where子句中使用!= 或者<>操作符, 否则索引失效导致进行全表扫描
4. 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描, 如:
可以这样查询:
5. in 和 not in 也要慎用, 否则会导致全表扫描 如:
对于连续的数值,能用between 就不要用in了
6.应尽量避免使用like, 这样会导致全表进行扫描:
我们可以通过执行命令
看下执行后的结果:
解释一下几个参数:
Operation:当前操作的内容
Object_Name: 当前表为city
CARDINALITY:返回的记录数
COST: oracle计算出来的一个数值,用于说明SQL执行的代价
Nested loop: 一般用在连接的表中有索引, 并且索引选择性较好的时候
Hash join:散列连接一般是做大数据连接时的常用方式, 一般用于在两个表的数据量差别很大的时候
Sort Merge join: 一般用于在没有索引,并且数据已经排序的情况
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: 一般用于在没有索引,并且数据已经排序的情况
相关文章推荐
- SQLServer 优化SQL语句 in 和not in的替代方案
- mysql数据库sql优化原则(经验总结)
- 如何利用oracle第三方工具做数据库的性能优化
- 总结SQL执行进展优化方法
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- 有意思的 SQL语句优化经历
- sql优化,数据缓存和页面静态化
- MySQL中优化常用的查询sql语
- SQL优化原则
- SQL语句及数据库优化
- 简单说下SQL优化
- MySql 里的IFNULL、NULLIF和ISNULL用法
- oracle sql性能优化
- 简化ABAP SQL语句
- mysql优化篇(一)
- SQL优化
- 数据库优化
- 数据库SQL优化大总结之 百万级数据库优化方案
- update的优化
- oracle走错索引不出结果