索引下(5)
在下列表T中,执行 select * from T where k betwee 3 and 5; ,需要执行几次树的搜索操作? mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg'); SQL 语句执行流程: 在k索引树上找到k值为3的记录,取得ID为300 再到ID索引树上找到ID为300对应的R3记录 在k索引树上找到k值为5的记录,取得ID为500 再回到ID索引树上找到ID为500对应的R4记录 在k索引树上找到k值为6的记录,不符合条件,结束循环 在这个过程中,回到主键索引搜索树的过程,成为回表。 在这个例子中,由于查询结果所需要的数据只有主键索引上有,所以不得不回表。如果执行的语句是 select ID from T where k between 3 and 5; ,只需要查询ID的值,而k索引树上有这个值,不需要回表,索引k已经覆盖了查询所需要的值,成为 覆盖索引