05 | 深入浅出索引(下)

一、需要回表的案例

前提建表语句

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');

在上面表T中,执行下面的语句,需要执行几次树的搜索操作?会扫描多少行?

select * from T where k between 3 and 5;

二、这条语句的执行流程

1、在k索引上找到k=3的记录,取得ID=300;
2、在ID索引树下查到ID=300对应的R3;
3、在k索引上找到k=5的记录,取到ID=500;
4、再回到ID索引树下查到ID=500对应的R4;
5、在k索引树取下一个值k=6,不满足条件,循环结束。
原文地址:https://www.cnblogs.com/charon2/p/11758318.html