Подтвердить что ты не робот

Какова цель PAD_INDEX в этом ограничении SQL Server?

У меня есть следующее ограничение, применяемое к одной из моих таблиц, но я не знаю, что означает PAD_INDEX.

Может кто-нибудь просветить меня?

CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC
) WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
        ^--------------^
         this part here
4b9b3361

Ответ 1

Индекс в SQL Server является B-Tree

  • FILLFACTOR применяется к нижнему слою
    Это слой node/данных на рисунке ниже

  • PAD_INDEX ON означает "Применить FILLFACTOR ко всем слоям"
    Это корень node и промежуточный уровень на рисунке ниже

Это означает, что PAD_INDEX полезен только при установке FILLFACTOR. FILLFACTOR определяет, сколько свободного места на странице данных (примерно)

Изображение из MSDN:

B-Tree structure

Ответ 2

В принципе, вы устанавливаете PAD_INDEX = ON, если вы ожидаете много случайных изменений в индексе регулярно.

Это помогает избежать разделения страниц индекса.

Я установил его, когда ожидаю, что 30% + случайных записей, включенных в индекс, будут удаляться на регулярной основе.

Ответ 3

От MSDN:

PAD_INDEX = {ON | ВЫКЛ}

Задает заполнение индекса. Значение по умолчанию OFF.

ON: Процент свободного пространства, заданного fillfactor, применяется к страницам промежуточного уровня индекса.

OFF или fillfactor не указан: Страницы промежуточного уровня заполняются до почти полной емкости, оставляя достаточное пространство для хотя бы одной строки максимального размера, который может иметь индекс, учитывая набор ключей на промежуточных страницах.

Параметр PAD_INDEX полезен только при указании FILLFACTOR, поскольку PAD_INDEX использует процент, указанный FILLFACTOR. Если процент, указанный для FILLFACTOR, недостаточно велик, чтобы разрешить одну строку, Database Engine внутренне переопределяет процент, чтобы обеспечить минимум. Количество строк на промежуточной странице индекса не меньше двух, независимо от того, насколько низко значение fillfactor.

В обратном совместимом синтаксисе WITH PAD_INDEX эквивалентен WITH PAD_INDEX = ON.