贝利信息

mysql覆盖索引是什么_mysql覆盖索引原理解析

日期:2025-12-27 00:00 / 作者:P粉602998670
覆盖索引指查询所需所有字段完全包含于同一索引中,MySQL可仅扫描该索引叶子节点获取结果,无需回表访问聚簇索引;其原理是二级索引叶子节点存索引列值+主键ID,覆盖时直接返回数据,EXPLAIN显示Using index即生效。

MySQL覆盖索引,是指查询所需的所有字段(SELECT 列 + WHERE/ORDER BY/JOIN 中涉及的列)都**完全包含在同一个索引中**,使得 MySQL 可以仅通过扫描该索引的叶子节点就拿到全部结果,**无需回表访问聚簇索引(即主键索引)的数据行**。

覆盖索引的核心原理:省掉回表这一步

InnoDB 中,普通索引(二级索引)的叶子节点只存**索引列值 + 对应主键 ID**。当查询字段不全在索引里时,MySQL 先用二级索引定位到主键 ID,再拿着这些 ID 去聚簇索引里查整行数据——这个过程叫“回表”,开销大。

而覆盖索引让整个查询“止步于二级索引”:

什么情况下能用上覆盖索引?

关键看查询是否“被索引兜住”:

怎么设计一个有效的覆盖索引?

不是索引越宽越好,而是按高频查询“定制”:

覆盖索引不是万能的

它解决的是“回表代价”,但不解决所有性能问题: