什么是回表,怎么减少回表?
什么是回表,怎么减少回表?
提示
题眼: 回表的作用
回表:回表就是在使用非聚集索引进行查询时,MySQL还需要访问表的数据行来获取完整的查询结果。当非聚集索引中的索引列不包含查询需要的字段时,MySQL需要根据索引列中的数据行指针也就是主键回到原表中查询其他的列值,这个过程就成为回表。通过尽量多的使用覆盖索引,将常用字段设置为主键索引来减少回表。
举个例子:假设student里有两个索引,一个是主键ID索引,一个是name的索引,除此之外还有其他很多字段。当我们执行以下这个SQL语句:
select * fron student where name = "香香编程喵喵喵"此时,它会先走name的索引,拿到对应的主键ID,然后拿着这个主键ID去主键索引上获取对应的所有字段信息然后返回。
减少回表,最简单的办法就是将SQL语句改造为:
select id,name fron student where name = "香香编程喵喵喵"此时,name索引上刚好有这两个字段,就没有必要再走回表了。
重要
参考答案:
在MySQL里当我们使用普通索引查找数据的时候,因为普通索引他是一个非聚集索引,他的叶子节点上存的是主键ID,当我们查到这个ID后再去主键索引上查一次,这个过程就叫做回表。减少回表的话,可以使用覆盖索引。可以把常用的字段建立一个联合索引,然后再select的时候尽量不要使用* ,用哪个字段就写哪个字段,这样可以走覆盖索引,就不需要再回表了。
