回表其实就是查询的一个步骤,当然是在某些场景下才有。一般数据库建表时,会创建索引,以普通索引为例,创建的索引结构中包含的是聚簇索引的值(一般就是主键id),在根据此普通索引进行查询时,首先会查到普通索引的位置,比如下标是110,那么会从110处取出聚簇值,也就是id值,再拿id值取表中取数据,这个过程就叫做回表。回表对于数据查询有时会导致性能变差。
以如下数据为例:
CREATE TABLE DMTEST(
ID INT,
RECORD1 VARCHAR(200),
RECORD2 VARCHAR(200));
对于此表建如下索引:
create index DMTEST.id_ind on dmtest(id);
对于如下查询:
select id,record1 from dmtest where id between 1 and 100000;
会产生回表:
查询时间如下:
为了消除回表,我们可以将查询列加入至索引,如下:
create index DMTEST.id_record on dmtest(id,record1);
然后执行计划变为:
数据查询时间约为:
所以在日常优化中需要关注回表对于性能的影响,建立合适的索引。
文章
阅读量
获赞