Mysql - 回表

Mysql回表指的是在InnoDB存储引擎下,二级索引(非聚集索引)查询到的索引列,如果需要查找所有列的数据,则需要到主键索引(聚集索引)里面去取出数据。这个过程就称为回表。因为行的数据都是存在主键索引B+tree的叶子节点里面,二级索引的B+树叶子节点都是存放的索引列、主键。【在使用非聚簇索引查询数据时,根据主键id到聚簇索引上查询数据的过程称为回表

例如:

有一张用户表 id(主键), username (二级索引),age

id是主键索引 username是二级索引,当我们通过二级索引查询返回记录时,例如:

select * from t where username = "bobo";

① 通过二级索引找到 bobo记录和主键id

② 在通过主键id去主键索引B+tree找到行记录

避免回表

1、查询条件使用聚集索引---避免回表查询

2、使用索引覆盖---避免回表查询【将单列索引升级为联合索引】

3、使用索引下推---减少回表次数【mysql 5.6 优化之后的功能】

posted @ 2023-09-13 00:12  李若盛开  阅读(500)  评论(0)    收藏  举报