MySQL 中的回表是什么?
重点回答
“回表”指的是在使用二级索引(非聚簇索引)作为条件查询时,由于二级索引中只存储了索引字段的值和的对应的主键值,无法得到其他数据,如果要查询数据行中的其他数据,需要根据主键去聚簇索引查找实际的数据行,这个过程就叫做回表。
展开
如select * from user where age = 20;
user表包含id,name,age三个字段,假设MySQL优化器确定使用age索引
查询过程如下:
根据二级索引age找到age=20的主键键值
因为查询的是所有字段,但是age索引中并没有name字段,所以还需根据主键去查询完整数据行
回表其实不仅只是两次查询,还会带来随机I/O,因为通过主键id去查询时,id不一定是连续的(age=20的人很多,age索引中年龄是有序的,所以id是无序,且不连续的),所以去主键索引频繁查询会造成随机I/O(随机I/O查询慢,顺序I/O查询快),导致性能变差。
#MySQL(21)评论