一、sql优化
1. 避免全表扫描
2. 考虑在where 及 order 涉及的列建立索引
3. 避免在where子句中使用is null(不会使用索引),建表建议默认值
4. 避免where中避免使用!=或<>操作(不会使用索引)
5. 避免where子句中使用or来连接条件,可以使用union all。
如:
select id from t where num = 10
union all
select id fromt where num = 20
6. in 和 not iin 也要慎用,否则会导致全表扫描。对于连续数值,能用between不用in。
7. 不用like通配符
8. 避免在where子句中对字段进行表达式操作,会导致引擎放弃使用索引进行全表扫描。
如:select id from t where num/2=100
应改为:
select id from t where num=100*2
9. 避免在where子句中对字段进行函数操作,导致全表扫描。
select id from t where substring(name, 1, 3)='abc',name以abc开头的id
应改为:
select id from t where name like 'abc%'
10. 使用符合索引查询时,须使用该索引中的第一个字段作为条件才能保证系统使用该索引。并且尽量让字段顺序与索引顺序相一致。
11. 很多时候用 exsit 代替 in 是一个好选择。
select num from a where num in(select num from b)
应该改为:
select num from a where exist(select 1 from b where num = a.num)