关于mysql索引和慢sql优化的一些总结

慢sql优化片面的看就是如何调整sql,使逻辑不变的情况下,命中合理的索引。

反过来讲,添加合理的索引,对系统性能的提高也就显而易见

.关于索引的规则 参考链接(https://blog.csdn.net/bigtree_3721/article/details/87478706)

1、最左原则

多个字段组合的复合索引,执行时按照从左到右的原则命中,

例子: user表中存在一个关于name_age_sex的复合索引,则相当于三条索引,分别是name,name_age,name_age_sex。

where条件中为name="olio" and age=18 和 age=18 and name="olio" 都会命中该索引,mysql会自动按照索引顺序对where条件后的条件进行排序,但是建议按照索引顺序进行where查询,因为排序和分组时并不会自动调整

where条件中 name="olio" and sex=1,因为age列where条件的缺失,则只有name=“olio”会命中索引,sex=1则未命中。

2、索引不会包含值含有null的列。

结论,某列如果需要添加到索引,则该列不能存在null值

例子:user表中存在一个关于name_age_sex的复合索引,如果age列中存在null值,那么该索引实际生效为name_sex(待验证)

3、对列进行运算或者转换等操作,则会全局扫描,不会命中索引

4、排序和分组时,需要严格按照复合索引的顺序进行操作,否则不会命中。在group和order后面跟上多列时,可以考虑使用复合索引。

5、like语句

like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

6、不使用NOT IN和 != 操作

关于mysql中的explain的使用 参考链接(https://blog.csdn.net/u010648555/article/details/81106983#explain_39)