回表定义:先索引扫描,再通过ID去取索引中未能提供的数据,即为回表。
-
假如有个表T, 里面三个字段:id k name, 其中对k建立了单独索引
-
如果语句是 select * from T where id=500,即主键查询方式(聚集索引),则只需要搜索 ID 这棵 B+ 树,查询一表即可
-
如果语句是 select id, k from T where k=5,即普通索引查询方式,则只要搜索 k 索引树,这样的话查询一表即可。
-
如果语句是 select id, k , name from T where k=5,第一次通过普通索引查询方式得到 id 的值为 500,再到 id 索引树搜索一次(需要回表才能查到name这个数据)。这个过程称为回表。那如何避免回表,将k和name建成联合索引即可,当然,就算回表也会比没有建立索引快
-
也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键(聚集索引)查询
-
如何避免回表:地址