1.合理使用like模糊查询。
Like查询时:‘%str’索引失效,全表扫描,而‘str%’索引不失效:
关键词: % orderno %,由于orderno前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%。
可以使用全文索引解决。
2.索引在where条件or和in生效的情况。
or两侧的都有索引时,索引生效;否则索引失效;
where子句and相连的条件中,有一个条件是带索引的,索引生效;
where子句即使and中有的条件是使用了in 索引仍然有效。
in造成索引失效,只有一个参数不会,
但是多个,没有命中索引。possible_keys :显示可能应用在这张表中的索引,一个或多个。
3.避免在where子句中对字段进行is null判断。
4.避免在where子句中对字段进行表达式操作。
例
5.避免隐式类型转换。
6.对于联合索引来说,要遵守最左前缀法则。
最左原则:
假设组合索引为:a,b,c的话;那么当SQL中对应有:a或a,b或a,b,c的时候,可称为完全满足最左原则;当SQL中查询条件对应只有a,c的时候,可称为部分满足最左原则;当SQL中没有a的时候,可称为不满足最左原则。
注:MySQL5.7开始,会自动优化,如:会把c,b,a优化为a,b,c使之完全遵循最左原则;会把c,a优化为a,c使之部分遵循最左原则。即:SQL语句中的对应条件的先后顺序无关。
在表中建立索引,优先考虑where、group by使用到的字段。