回表,覆盖索引和索引下推

回表

回表:使用非聚簇索引(二级索引)进行查询的时候,因为二级索引里只存储了索引字段的值和对应的主键值,如果需要查询数据行中的其他数据,就需要根据主键去聚簇索引中查找实际的数据行。

回表操作主要步骤:

  1. 根据二级索引找到符合条件的记录的主键值
  2. 根据主键值回到聚簇索引中查找到整行的数据

回表的问题:

回表会带来潜在的性能问题,因为它增加额外的随机I/O开销,每次回表都需要访问两次索引,一次是通过二级索引定位到主键,另一次是通过主键再聚簇索引中找到实际的数据行。这再高并发、大数据量的情况下,可能会出现性能瓶颈。

为了避免回表查询,可以使用覆盖索引,即一个索引包含所有需要查询字段的值,这样查询据可以通过二级索引本身得到所需的数据,而不需要回表到主键索引。

覆盖索引(Covering Index)

覆盖索引是指一个索引包含了所有需要查询字段的值,这样数据库引擎就不需要回表就能完成查询。覆盖索引可以减少I/O操作。

索引下推(Index Pushdown)

索引下推是一种优化策略,用于减少从表中读取到的行数,在这种机制下,数据库引擎可以在使用索引时,将一些过滤条件下推到索引扫描的过程中,这样可以更早地排除不符合条件的行,减少需要返回到上层的数据。索引下推特别适合使用联合索引进行查询优化的场景。

索引下推的目的时为了减少回表次数,也就是减少I/O操作。对于InnoDB的聚簇索引来说,数据和索引是在一起的,不存在回表


回表,覆盖索引和索引下推
https://blog.mufen.site/2024/12/21/回表,覆盖索引和索引下推/
作者
mufen
发布于
2024年12月21日
许可协议