一、优化方向
1.避免不必要的大型表的全表扫描
2.缓存小型表的全表扫描
3.检验、优化索引的正确使用
4.检验、优化的SQL连接技术
二、具体优化方法
1、查询条件(where后面的子句)优化,避免全表扫描
-
考虑在where及order by等列上建立索引,否则将导致进行全表扫描
-
避免在where子句中对字段进行null值判断,否则将导致放弃使用索引而进行全表扫描
-
避免在where子句中使用!=或<>操作符,否则将导致放弃使用索引而进行全表扫描。
-
避免用or连接条件,如果有部分字段存在索引,部分不存在索引,则将导致放弃使用索引而进行全表扫描,建议使用union all代替。例:
select id from t where num=10 or Name = 'admin'
可以这样查询:
select id from t where num = 10 union all select id from t where Name = 'admin'
-
慎用in 和 not in ,否则会导致全表扫描。使用exists替换in,子查询结果集小,用IN;外表小,子查询表大,用EXISTS;建议实际选取哪个,可以对比两个sql的执行计划。如:
select id from t where num in(1,