MySQL/InnoDB - 叶节点中 PK 的顺序
MySQL/InnoDB - order of PK in Leaf Node
我正在使用 InnoDB。
如果我有这样的数据
[PKID : ?] col1
---------------
[PKID : 1] 7
[PKID : 2] 7
[PKID : 3] 5
[PKID : 4] 5
[PKID : 5] 7
并且具有 col1 的 B+Tree 索引。应该是这样的:
5(PKID : 3 or 4) - 5(PKID : 3 or 4) - 7 (PKID : 1 or 2 or 5) - 7 (PKID : 1 or 2 or 5) - 7 (PKID : 1 or 2 or 5)
我想知道聚簇索引是否总是按 PKID 排序:
5(PKID : 3) - 5(PKID : 4) - 7 (PKID : 1) - 7 (PKID : 2) - 7 (PKID : 5)
谢谢。
InnoDB原则上不需要在二级索引中进行PK排序。对于二级索引中的每条记录,它调用 Handler_read_rnd
从 PRIMARY 索引中获取字段。
但为了获得最佳读取,它可能会对它进行排序。
应该可以检查这个。在从二级索引读取的 SELECT 之后检查 Handler_read_rnd_next
是否增加。如果是这样,那么 PK 值也被排序。
我正在使用 InnoDB。
如果我有这样的数据
[PKID : ?] col1
---------------
[PKID : 1] 7
[PKID : 2] 7
[PKID : 3] 5
[PKID : 4] 5
[PKID : 5] 7
并且具有 col1 的 B+Tree 索引。应该是这样的:
5(PKID : 3 or 4) - 5(PKID : 3 or 4) - 7 (PKID : 1 or 2 or 5) - 7 (PKID : 1 or 2 or 5) - 7 (PKID : 1 or 2 or 5)
我想知道聚簇索引是否总是按 PKID 排序:
5(PKID : 3) - 5(PKID : 4) - 7 (PKID : 1) - 7 (PKID : 2) - 7 (PKID : 5)
谢谢。
InnoDB原则上不需要在二级索引中进行PK排序。对于二级索引中的每条记录,它调用 Handler_read_rnd
从 PRIMARY 索引中获取字段。
但为了获得最佳读取,它可能会对它进行排序。
应该可以检查这个。在从二级索引读取的 SELECT 之后检查 Handler_read_rnd_next
是否增加。如果是这样,那么 PK 值也被排序。