指的是在Mysql中使用非聚簇索引,也就是使用二级索引进行作为条件进行查询时,查询了除索引之外的数据,需要根据获得的主键去聚簇索引,查询其他的所需的数据。
有表格(id,name,age),进行查询select * from where age = 20;
- 若 age 字段存在单列索引或联合索引(如 (name,age)),会优先选择 age 索引进行查询,二级索引的叶子节点存储 age 的值和对应的主键 id,不包含其他字段(如 name)
- 在 age 的索引树中,快速定位到 age == 20 的索引条目,获取对应的主键 id 列表
- 根据主键 id 列表,逐条回表到聚簇索引(主键索引)中查找完整的行数据
接下来再次根据主键的聚簇索引查询所有的数据所在的位置:
回表的问题:
回表可能不仅仅是查一次,也可能是查多次,关于age = 20得到的主键id的可能分布不连续的的问题,造成随机IO的出现,开销增大