SQL性能优化
1、不使用select *
2、使用参数查询,防止SQL注入
3、使用exists或not exists代替in或not in
4、应考虑在where和order by的字段列上加索引
5、设置where条件的顺序时,可先写能过滤大部分数据的条件,这样CPU占用率更低
6、大量数据时使用<及>操作的效率更高,如>2低效,>=3则相对高效
7、将不需要的数据在group by之前过滤掉,可提高group by语句的效率
劣:....group by xx Having ....
优:....where ...group by xx
8、尽量避免在where子句中对字段列进行函数操作、表达式操作,否则将导致全表扫描
...where num/2=100;
可改写成 ...where num=100*2;
9、尽量避免在where子句中使用!=或<>操作符,否则将使引擎放弃索引而走全表扫描
10、尽量避免在where子句中进行null值判断,否则将导致全表扫描
11、索引时不索引空值,所以不能用null作索引,即:如果某列存在null值,即使对该列建了索引也不会提高性能
注:写法上,可用a>0或a>' '来替代 a is not null
12、尽量避免在where子句中使用OR连接,否则将导致全表扫描
针对多个索引列使用or操作会导致全表扫描,可用union改写成多个子句来代替or
13、尽量避免使用前置%进行模糊查询
14、尽量避免在where子句中使用参数(SQL只有在执行时才会解析局部变量),会导致全表扫描
15、Explain SQL执行:
type不是ALL、key(索引)不是null-->反之,则是走了全表扫描
rows数量不大(预计要扫描的数据行数)
Extra额外:不是using filesort(文件排序)、不是using temporary(临时表)-->反之,要优化
浙公网安备 33010602011771号