《高性能mysql》聚簇索引问题

发布于 2022-09-06 09:01:03 字数 308 浏览 20 评论 0

如下红色框中的两句话是什么意思?
之前在看多列索引的时候, 理解的是索引创建后, 会将每条记录中对应列的值也保存到索引树中, 如果查询的字段正好都被覆盖到, 那都不用去回表了!

所以我的理解是索引树中是有真正数据的, 那下面红色框中的意思莫非是:“聚簇索引会在索引树中将所有数据放进去”?

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁月染过的梦 2022-09-13 09:01:03

问:聚簇索引会在索引树中将所有数据放进去么?
答:是的,它的数据行存放在索引的叶子页中,且只有一份。

首先,理解聚簇索引

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 列。
睫毛上残留的泪 2022-09-13 09:01:03

简单来说,普通的索引,B-TREE中只索引了数据的位置,你用索引查找时,先在树中找到索引位置,但索引所在的节点只记录了数据在磁盘中的物理位置,也就是说,引擎还需要在磁盘中读取你要的数据

聚簇索引,索引的除了ID,还包括数据本身,即你只要在树中找到索引的位置,数据也在该位置了,不用再去读磁盘

自此以后,行同陌路 2022-09-13 09:01:03

聚簇索引(clustered indexes)通常就是主键,存放的是记录(数据行)本身。
其他索引(secondary indexes)存放的是主键地址。

官方文档写得很清晰
参考:
https://dev.mysql.com/doc/ref...

南风几经秋 2022-09-13 09:01:03

图片描述,不知道你还能看懂,不懂再追问,我最近也在啃这本书

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文