Правила проектирования некластеризованных индексов

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

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

Подобно тому, как читатель использует индекс в книге, оптимизатор запросов выискивает значение типа данных, просматривая некластеризованный индекс. Там он находит место расположения интересующего его значения в таблице и затем получает данные непосредственно из этого места. Благодаря этому некластеризованные индексы считаются оптимальным выбором для запросов с точным соответствием, поскольку такие индексы содержат записи, описывающие точное расположение в таблице значений типов данных, которые задаются в подобных запросах. Например, чтобы выбрать из таблицы Person.Person всех сотрудников с определенной фамилией, оптимизатор запросов может использовать некластеризованный индекс IX_Person_LastName_FirstName_MiddleName, ключевым столбцом в нем будет LastName. Оптимизатор запросов может быстро обнаружить в индексе все записи, соответствующие указанному значению LastName. Каждый элемент указателя ссылается на конкретную страницу и строку в таблице или на кластеризованный индекс, в котором можно найти соответствующие данные. После того как оптимизатор запросов обнаружит все записи в индексе, он может переходить непосредственно к нужной странице и строке, откуда он будет получать требуемые данные.

Вопросы работы с базами данных

При проектировании некластеризованных индексов следует принимать во внимание характеристики соответствующей базы данных.

  • В базах данных или таблицах, характеризующихся нечастыми обновлениями и большими объемами хранимых данных, запросы могут выполняться быстрее при использовании множества некластеризованных индексов. Рекомендуется создать отфильтрованные индексы для четко определенных подмножеств данных, что позволит повысить производительность запросов, а также снизить затраты на обслуживание и хранение индексов по сравнению с полнотабличными некластеризованными индексами.

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

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

    Большое количество индексов в таблице снижает производительность инструкций INSERT, UPDATE, DELETE и MERGE, потому что при изменении данных в таблице все индексы должны быть изменены соответствующим образом.

Вопросы работы с запросами

Перед тем как приступать к созданию некластеризованных индексов, необходимо разобраться с тем, каким образом будет организован доступ к данным. Рассмотрите возможность использования некластеризованных индексов для запросов, обладающих следующими атрибутами:

  • Используйте предложения JOIN или GROUP BY.

    Создавайте многомерные некластеризованные индексы для столбцов, участвующих в операциях соединения и группирования, а кластеризованный индекс — для столбцов с внешними ключами.

  • Запросы, не возвращающие больших результирующих наборов.

    Создайте отфильтрованные индексы для использования с запросами, возвращающими четко определенные подмножества строк из большой таблицы.

  • Содержат столбцы, часто встречающиеся в условиях поиска запроса, таких как предложение WHERE, возвращающих точные соответствия.

Вопросы работы со столбцами

Рассмотрите столбцы, обладающие одним или несколькими указанными ниже атрибутами:

  • Покрытие запроса.

    Производительность повышается в тех случаях, когда индекс содержит все столбцы запроса. Оптимизатор запросов может обнаружить все значения столбцов внутри данного индекса; необходимость в обращении к таблицам или данным кластеризованных индексов отпадает, в результате чего снижается интенсивность дисковых операций ввода-вывода. Для расширения покрытия столбцов не следует создавать широкий ключ индекса; используйте индекс с включенными столбцами. Дополнительные сведения см. в разделе Индекс с включенными столбцами.

    Если таблица имеет кластеризованный индекс, то столбец или столбцы, определенные в этом кластеризованном индексе, автоматически добавляются к концу каждого некластеризованного индекса таблицы. Это может привести к возникновению покрытого запроса без указания столбцов кластеризованного индекса в определении некластеризованного индекса. Так, если для таблицы имеется кластеризованный индекс на столбце В, то некластеризованный индекс на столбцах Б и A будет иметь в качестве ключевых значений столбцы Б, A и В.

  • Множество индивидуальных значений, таких как сочетание фамилии и имени, если кластеризованный индекс используется для других столбцов.

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

Параметры индексов

Существует несколько параметров индексов, которые можно использовать при создании некластеризованного индекса. Особое внимание нужно уделять следующим параметрам:

  • FILLFACTOR

  • ONLINE

Дополнительные сведения см. в разделе Установка параметров индекса.