具有顺序主自动增量键的数据库记录是否可能位于 INNODB table 的同一页上?

Are database records with sequential primary autoincrement keys likely to be on the same page in an INNODB table?

给定一个 table 具有大的自动递增整数主键,我想知道具有连续或接近连续主键的多行事务是否可能导致比相同主键更少的磁盘 IO 操作具有更广泛分布的值的相同行数的事务。

例如:

SELECT WHERE id IN 如何对具有主键的记录进行语句: 10202、10203、10205、10207、10208、10209,与键相同的语句进行比较:7、10202、52401、28772、924、1189,假设所有记录都远小于页面大小的 1/6?

是的,如果它们是按那个顺序插入的。然而,实际上,整个数据库 I/O 模式非常随机,因此可能难以最终衡量净收益。

正如@Gordan 指出的那样,记录按主键顺序存储。不过,它们的插入顺序无关紧要。

我想说如果主键值是集群的,InnoDB 可能会发出更少的 IO 请求。让我解释一下原因。

假设所有 InnoDB 页面都在磁盘上,缓冲池中没有任何内容。要拉取记录 10202 InnoDB 将需要读取根页面,所有 non-leaf 页面一直到叶页面。它读取的所有页面都将存储在缓冲池中。

下一次读取 - 10203。很可能 InnoDB 不会进行任何磁盘读取,因为所有页面都已经在缓冲池中(除非 10203 在相邻叶页面上的可能性较小)。

现在,如果 InnoDB 需要从索引的其他部分读取一些 id,它将需要读取根页面(很可能已缓存),non-leaf 页(其中一些很可能已缓存。考虑到 B+tree 非常浅)和叶页(未缓存)。所以,你得到一个额外的磁盘读取。