Коэффициент заполнения некластеризованного индекса в столбце адреса электронной почты?

#sql-server

Вопрос:

Я пытаюсь выяснить, каким был бы идеальный коэффициент заполнения для некластеризованного индекса столбца, такого как адрес электронной почты. Если у меня есть таблица персон, в которую часто добавляются, коэффициент заполнения 0 приведет к значительной фрагментации индекса, поскольку каждый новый человек будет иметь здесь по существу случайное значение. В моем случае данные часто записываются и считываются, но у нас почти нет изменений или удалений. Существуют ли какие-либо рекомендации по индексированию столбцов этих типов в отношении коэффициента заполнения?

Комментарии:

1. Вы действительно измерили и подтвердили тяжелую фрагментацию? Подумайте, какова «средняя» длина адреса электронной почты для ваших данных и сколько примерно поместится на странице 8K; Лично я бы придерживался 0/100; как только произойдет разделение страницы, на каждой странице будет ~50% свободного места, но до того, как это произойдет, вы заставите каждую страницу быть на x% пустой, и ваша оперативная память тоже на x% пуста.

2. Я проверил avg_fragmentation_in_percent и обнаружил, что в некоторых случаях он достигает 99%, да. Или вы хотите сказать, что в данном случае это не имеет значения?

3. Лично, если ваши данные находятся на быстром SSD-накопителе (предположительно, это так), то фрагментация имеет гораздо меньшее значение, чем раньше; Я предпочитаю использовать свою дорогую оперативную память и минимизировать ввод-вывод, что, как правило, означает высокий коэффициент заполнения при восстановлении индексов. Однако это спорная тема, и, похоже, она склонна к разногласиям.

4. Кроме того, для индекса адресов электронной почты, которые, несомненно, имеют много общих доменных имен, я бы рассмотрел сжатие страниц, которое дало бы хорошую экономию и гораздо более эффективное использование ввода-вывода/памяти.

5. Спасибо за совет о сжатии страниц в этом индексе. При включении я получил сжатие немного лучше, чем 2:1.

Ответ №1:

Коэффициент заполнения не имеет значения, если вы не перестроите индекс. Индекс с «случайными» точками вставки создаст разбиения страниц и, естественно, сохранит место на страницах для размещения новых строк, так как разбитые страницы заполняются на 50%.

Если вы перестраиваете такой индекс (для чего часто нет причин), рассмотрите возможность использования коэффициента заполнения, чтобы не удалять все свободное пространство на страницах, что приведет к шквалу разбиений страниц после перестроения, конечный результат которого будет аналогичен (но дороже) перестроению с коэффициентом заполнения.

Эмпирически, 60-75-разумный выбор.