文章提供了一些查询优化的基本思路,从索引和慢查询的关系、什么叫做使用了索引、索引的过滤性、查询的过滤性,这几个方面分析了查询的优化过程,尤其是查询的过滤性最有看点。在查询的过滤性这点中说到在 MySQL 5.5 和之前的版本中查询的执行流程,和在 MySQL 5.6 版本引入了 index condition pushdown 的优化,最后说到在 MySQL 5.7 引入的虚拟列的优化,非常精彩的分析。
文章从什么是回表查询、什么是索引覆盖、如何实现索引覆盖,这几个方面分析了查询的优化过程,其实还是要从原理出发,如果你了解 InnoDB 索引的原理,文章中说的内容就可以很好的理解了。
-
文章描述了如下两种场景会导致索引失效: 列类型与 where 中的参数类型不符,不能命中索引,会导致全表扫描。
- 相 join 的两个表的字符编码不同,不能命中索引,会导致笛卡尔积的循环计算。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/gre1uu 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。