B-tree 索引的最右边的叶页是其中具有最大值的叶页:
+---------+
|root page|
+---------+
/ \
/ \
+----------+ +----------+
|inner page| |inner page|
+----------+ +----------+
/ \ / \
/ \ / \
+-----------+ +-----------+ +-------------+ +-------------+
|1 3 ... 100| |101 ... 900| |1000 ... 2000| |2000 ... 5000|
+-----------+ +-----------+ +-------------+ +-------------+
leaf page leaf page leaf page rightmost leaf page
由于将新值插入最右边的页面是一种常见情况,例如使用自动递增的序列值或不断增加的时间戳,因此插入的处理方式不同,就像创建索引时一样。基本原理是这种插入通常是由INSERT
s 而不是由UPDATE
s 引起的。
如果最右边的页面被视为所有其他页面,那么自动递增的主键或时间序列通常会创建一个密集的索引,而不管fillfactor
设置如何。然后第一个UPDATE
不是HOT并创建新索引条目的会导致索引页面被拆分,这很昂贵。这将违背将 a 设置为fillfactor
低于 100 以防止过度的页面拆分和碎片的概念。
由于INSERT
s 无处不在,例如主键的 UUID,许多叶子页面将自动不会被完全填满。