MySQL中的索引下推是什么?
MySQL中索引下推是什么?
索引下推
索引下推指的是在查询的时候,如果使用了索引,可以把索引下推到引擎层先对数据进行过滤,再对过滤后的数据进行查找。减少回表操作,减少磁盘I/O。
也就是说,索引下推,当查询条件包含索引列,查询可以使用索引时,MySQL并不直接遍历数据进行查找,而是将索引下推到引擎层,由存储引擎过滤数据,MySQL再对过滤后数据进行查找。
索引下推不一定只对联合索引生效,当索引能够被使用,能够用于数据过滤都是可以的,也就是单列索引也有可能有索引下推情况。对于联合索引,也需要有一定的最左前缀匹配才能有效使用索引。
索引下推和覆盖索引不同,覆盖索引指的是索引列完全包含查询条件,可以直接通过索引返回数据,完全可以不回表;而索引下推中,索引列可能不完全包含查询条件,但也可以将已经匹配上的索引列下推到引擎进行数据过滤,然后在过滤后的数据中查找,也就是减少回表。
索引下推的生效条件
索引下推在MySQL 5.6版本后应用于InnoDB和MyISAM引擎
索引下推在查询条件有主键时,即使用主键索引时不生效
索引下推在查询条件使用了函数、表达式时不生效
当查询使用了子查询时,索引下推是否生效需要看实际情况,通过Explain分析查询执行日志
为什么索引下推对主键索引不生效
因为MySQL中的主键索引使用B+树结构,索引排列有序,MySQL可以根据主键索引定位到数据而无需过滤
对于是聚簇索引的主键索引,B+树的叶子节点直接存储数据,不需要回表
为什么使用函数和表达式查询时索引下推不生效
索引存储的是索引的原始值,如果是简单条件 (等值查询、>、<、BETWEEN等),MySQL可以直接判断是否符合
对于函数和表达式,其中的索引值是变化的,无法通过原始值直接判断,需要进行计算,所以不生效。
本文标题:MySQL中的索引下推是什么?
文章作者:Crowntit
发布时间:2025-05-25
最后更新:2025-05-25
版权声明:本文为原创文章,转载请附上原文出处链接。