创建索引时,尽量满足一下规则:
1.尽量匹配所有查询(全值匹配我最爱);
2.如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
3.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描。
4.存储引擎不能使用索引中范围条件右边的列。
5.mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描。
6.is not null 也无法使用索引,但是is null是可以使用索引的。
7.like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作。
8.字符串不加单引号索引失效。
一般性建议:
对于单键索引,尽量选择针对当前query过滤性更好的索引。
在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。
在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引。
在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面。
书写sql语句时,尽量避免造成索引失效的情况。
没有100%把握时,执行sql不要指定使用具体索引,交由优化器来选择。