不需要建索引的三种情况:
1.表记录太少
2.经常需要增删改查的表
3.数据重复过多且分布平均的字段,建了效果不明显
JOIN语句优化
左右连接相反加索引
尽量减少join的循环总次数,永远用小的结果集去驱动大的结果集
保证join字段都已经建好索引
在无法保证join字段都建好索引的情况下且内存资源充足的情况下,不用太吝啬join buffer的设置
避免索引失效
1.全值匹配
2.最佳左前缀法则
3.不在索引上做任何操作(计算,函数,类型转换),否则索引失效
4.存储引擎不能使用索引中范围条件右边的列,当复合索引出现模糊查询时,当前字段右边的索引将失效(除like'a%'外,因为a为定值)
5.尽量使用覆盖索引,减少select *
6.mysql在使用!=或者<>的时候无法使用索引
7.is null , is not null 也无法使用索引
8.like时以通配符%开头时,后面索引失效,级别为range,用覆盖索引则不会失效,但只能用到部分
9.字符串不加单引号索引失效
10.少用or,索引会失效
ORDER BY
复合索引的顺序和ORDER BY不一样时,出现filesort
GROUP BY
与ORDER BY 一致
WHERE 高于 Having, 能用WHERE 尽量不用 HAVNG