在上一篇文章中,我和你介绍了InnoDB索引的数据结构模型,今天我们再继续聊聊跟MySQL索引有关的概念。
在开始这篇文章之前,我们先来看一下这个问题:
在下面这个表T中,如果我执行 select * from T where k between 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');
图1 InnoDB的索引组织结构
现在,我们一起来看看这条SQL查询语句的执行流程:
-
在k索引树上找到k=3的记录,取得 ID = 300;
-
再到ID索引树查到ID=300对应的R3;
-
在k索引树取下一个值k=5,取得ID=500;
-
再回到ID索引树查到ID=500对应的R4;
-
在