素材牛VIP会员
《高性能mysql》聚簇索引问题
 熊***子  分类:SQL代码  人气:1638  回帖:4  发布于6年前 收藏

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

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

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv5 码农
流***雨 交互设计师 6年前#1

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

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

Lv1 新人
记***香 站长 6年前#2

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

Lv5 码农
风***在 产品经理 6年前#3

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

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

Lv4 码徒
阵***香 交互设计师 6年前#4

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

首先,理解聚簇索引

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 列。
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取