Рассмотрим индекс B-дерева для значения, которое всегда будет монотонно увеличиваться, например столбец типа IDENTITY. В обычной реализации B-дерева, когда узел заполнен, он будет разделен на 50% / 50%, и мы получим B-дерево, в котором (почти) все узлы будут заполнены только на 50%.
Я знаю, что Oracle обнаруживает, когда значение постоянно увеличивается, и в этих случаях Oracle выполняет разделение на 90% / 10%. Таким образом, (почти) все узлы будут заполнены на 90%, и в этих, довольно распространенных случаях достигается гораздо лучшее использование страниц.
Мне не удалось найти документацию для аналогичной функции в SQL Server. Однако я провел два эксперимента, в которых я вставил в индекс N случайных целых чисел и N последовательных целых чисел соответственно. В первом случае использовалось гораздо больше страниц, во втором.
Предоставляет ли SQL Server аналогичную функциональность? Если да, то можете ли вы указать мне некоторую документацию по этой функции?
ОБНОВЛЕНИЕ: Кажется, согласно экспериментам, представленным ниже, листовые узлы остаются неразделенными, а внутренние узлы делятся на 50% / 50%. Это делает B-деревья на увеличивающихся ключах более компактными, чем на случайных ключах. Тем не менее, подход Oracle на 90% / 10% еще лучше, и я все еще ищу некоторую официальную документацию, которая может проверить поведение, наблюдаемое в экспериментах.