Msql(3)-SQL优化

一、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)

12. 索引列有大量重复值时索引几乎无用
13. 尽量使用数字型字段。
14. 尽可能使用varchar代替char。
15. 任何地方都不要使用select * from t

你可能感兴趣的:(Msql(3)-SQL优化)