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,不满足条件,循环结束。