如下红色框中的两句话是什么意思?
之前在看多列索引的时候, 理解的是索引创建后, 会将每条记录中对应列的值也保存到索引树中, 如果查询的字段正好都被覆盖到, 那都不用去回表了!
所以我的理解是索引树中是有真正数据的, 那下面红色框中的意思莫非是:“聚簇索引会在索引树中将所有数据放进去”?
问:聚簇索引会在索引树中将所有数据放进去么?
答:是的,它的数据行存放在索引的叶子页中,且只有一份。
Every InnoDB table has a special index called the clustered index where the data for the rows is stored.
聚簇:术语,表示数据行和相邻的键值紧凑的存储在一起。
那么,分开来看,聚簇索引
== 索引
+ 数据存储方式
InnoDB
为例,其为 B-Tree 索引
聚簇索引
不光有 索引
,还有存放在叶子页的数据行聚簇索引
只能有一个,因为 无法同时把数据行放在两个不同的地方
PRIMARY KEY
是一种典型的 聚簇索引
,InnoDB
的 聚簇索引
具体选择策略如下:
PRIMARY KEY
,那么,这就是此表的 聚簇索引
;PRIMARY KEY
,但是定义了 非空唯一索引,那么,InnoDB
会选择第一个 非空唯一索引 作为此表的 聚簇索引
;PRIMARY KEY
也没有合适的 UNIQUE
,则 InnoDB
会自动生成一个隐藏的聚簇索引,此索引包含一个单点递增的 ID
列。