MySQL - 覆盖索引、回表查询

柔情只为你懂 2024-02-20 09:42 118阅读 0赞
  1. 覆盖索引

    • 覆盖索引是指一个索引包含了查询所需的所有列,而不需要进一步的访问主表。这意味着查询可以从索引本身中获取所有需要的数据,而不必访问主表的行记录。
    • 覆盖索引通常用于提高查询性能,因为它减少了I/O操作,降低了查询的成本。当查询可以完全依赖于索引,而无需回到主表获取数据时,就发生了覆盖索引。
  2. 回表查询

    • 回表查询是当某个查询无法从索引中获取所需的所有列数据,必须通过索引中的键值(通常是主键值)到主表中进行进一步查找的情况。
    • 通常,回表查询发生在普通索引中,因为普通索引的叶子节点只包含索引列的值和主键值,而不包含其他列的数据。当查询需要获取主表中的其他列时,数据库引擎会执行额外的查找操作,这个过程被称为回表。

在InnoDB存储引擎中,聚簇索引是特殊类型的索引,它的叶子节点存储整个行记录而不仅仅是索引列的值。只有一个聚簇索引,它通常是主键索引,因为主键是唯一标识一行记录的。在这种情况下,如果查询可以利用主键索引获取所有所需数据,就可以实现覆盖索引。否则,如果需要从主表中获取其他列数据,就会发生回表查询。

总结,覆盖索引是一种性能优化技术,允许查询从索引中获取所有需要的数据,而不需要回表到主表。回表查询则是当索引无法提供全部数据时,必须回到主表查找其他列数据的操作。聚簇索引通常用于实现覆盖索引,而普通索引通常导致回表查询。

发表评论

表情:
评论列表 (有 0 条评论,118人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL & 索引覆盖

    索引类型 聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录 普通索引:二级索引,除聚簇索引外的索引