MySQL/InnoDB - 叶节点中的 PK 顺序

标签 mysql indexing innodb

我正在使用 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 来从主索引中获取字段。

但为了获得最佳读取效果,它可能会对它进行排序。

应该可以检查一下。在从二级索引读取的 SELECT 操作之后,检查 Handler_read_rnd_next 是否增加。如果是这样,那么 PK 值也会排序。

关于MySQL/InnoDB - 叶节点中的 PK 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678629/

相关文章:

mysql - 解决 INSERT race condition mysql,避免锁

java - 当从 imageservlet 提供多个 blob 图像时,Glassfish 挂起

mysql - 最新版本的 mysql2 和 mysql gems 需要 mysql 6.0。如何在 5.x 中使用它?

mysql - 选择平均值小于指定值的所有条目

php - 如何在 php 中使用不同的 mysql 查询从数据库表中获取值

MySQL 如何在不触发修复的情况下向 innodb 表添加新的多列索引?

mysql - 组合主键 VS。 MySQL 中的辅助键

indexing - 谷歌搜索和我的网页的问题

mysql - 如何优化这个 MySQL 查询? (移动窗口)

python - 如何通过每次都可以更改的索引删除列表中的多个元素?