《高性能mysql》聚簇索引问题
如下红色框中的两句话是什么意思?
之前在看多列索引的时候, 理解的是索引创建后, 会将每条记录中对应列的值也保存到索引树中, 如果查询的字段正好都被覆盖到, 那都不用去回表了!
所以我的理解是索引树中是有真正数据的, 那下面红色框中的意思莫非是:“聚簇索引会在索引树中将所有数据放进去”?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
问:聚簇索引会在索引树中将所有数据放进去么?
答:是的,它的数据行存放在索引的叶子页中,且只有一份。
首先,理解聚簇索引
聚簇:术语,表示数据行和相邻的键值紧凑的存储在一起。
那么,分开来看,
聚簇索引
==索引
+数据存储方式
以
InnoDB
为例,其为B-Tree 索引
即,
聚簇索引
不光有索引
,还有存放在叶子页的数据行另外
聚簇索引
只能有一个,因为 无法同时把数据行放在两个不同的地方PRIMARY KEY
是一种典型的聚簇索引
,InnoDB
的聚簇索引
具体选择策略如下:PRIMARY KEY
,那么,这就是此表的聚簇索引
;PRIMARY KEY
,但是定义了 非空唯一索引,那么,InnoDB
会选择第一个 非空唯一索引 作为此表的聚簇索引
;PRIMARY KEY
也没有合适的UNIQUE
,则InnoDB
会自动生成一个隐藏的聚簇索引,此索引包含一个单点递增的ID
列。简单来说,普通的索引,B-TREE中只索引了数据的位置,你用索引查找时,先在树中找到索引位置,但索引所在的节点只记录了数据在磁盘中的物理位置,也就是说,引擎还需要在磁盘中读取你要的数据
聚簇索引,索引的除了ID,还包括数据本身,即你只要在树中找到索引的位置,数据也在该位置了,不用再去读磁盘
聚簇索引(clustered indexes)通常就是主键,存放的是记录(数据行)本身。
其他索引(secondary indexes)存放的是主键地址。
官方文档写得很清晰
参考:
https://dev.mysql.com/doc/ref...