Правила проектирования некластеризованных индексов
Некластеризованный индекс содержит значения ключей индекса и указатели строк, которые указывают на место хранения табличных данных. Дополнительные сведения об архитектуре некластеризованных индексов см. в разделе Структуры некластеризованных индексов.
Можно создать несколько некластеризованных индексов для таблицы или индексированного представления. Как правило, некластеризованные индексы следует создавать для повышения эффективности часто используемых запросов, не учитываемых кластеризованными индексами.
Подобно тому, как читатель использует индекс в книге, оптимизатор запросов выискивает значение типа данных, просматривая некластеризованный индекс. Там он находит место расположения интересующего его значения в таблице и затем извлекает данные непосредственно из этого места. Благодаря этому некластеризованные индексы считаются оптимальным выбором для запросов с точным соответствием, поскольку такие индексы содержат записи, описывающие точное расположение в таблице значений типов данных, которые задаются в подобных запросах. К примеру, чтобы выбрать в таблице HumanResources.Employee всех сотрудников, подчиняющихся тому или иному менеджеру, оптимизатор запросов может воспользоваться некластеризованным индексом IX_Employee_ManagerID; ключевым столбцом в нем является ManagerID. Оптимизатор запросов может быстро обнаружить в индексе все записи, соответствующие указанному значению ManagerID. Каждая запись индекса указывает на конкретную страницу и строку в таблице или на кластеризованный индекс, в котором можно найти соответствующие данные. После того как оптимизатор запросов обнаружит все записи в индексе, он может переходить непосредственно к нужной странице и строке, откуда он будет получать требуемые данные.
Вопросы работы с базами данных
При проектировании некластеризованных индексов следует принимать во внимание характеристики соответствующей базы данных.
- В базах данных или таблицах, характеризующихся нечастыми обновлениями и большими объемами хранимых данных, запросы могут выполняться быстрее при использовании множества некластеризованных индексов.
Производительность приложений систем поддержки принятия решений, а также баз данных может быть увеличена за счет использования большого числа некластеризованных индексов. В процессе определения наиболее быстрого метода доступа оптимизатор запросов может выбирать из большего числа индексов, а если база данных не предназначена для частых обновлений, это значит, что операции по обслуживанию индексов не будут сказываться на ее быстродействии. - При работе с приложениями и базами данных оперативной обработки транзакций следует избегать слишком большого числа индексов. Кроме того, индексы должны быть узкими, то есть содержать минимальное количество столбцов.
Большое количество индексов в таблице снижает производительность инструкций INSERT, UPDATE и DELETE, потому что при изменении данных в таблице все индексы должны быть скорректированы соответствующим образом.
Вопросы работы с запросами
Перед тем как приступать к созданию некластеризованных индексов, необходимо разобраться с тем, каким образом будет организован доступ к данным. Рассмотрите возможность использования некластеризованных индексов для запросов, обладающих следующими атрибутами:
- Используйте предложения JOIN или GROUP BY.
Создавайте многомерные некластеризованные индексы для столбцов, участвующих в операциях соединения и группирования, а кластеризованный индекс — для столбцов с внешними ключами. - Запросы, не возвращающие больших результирующих наборов.
- Содержат столбцы, часто встречающиеся в условиях поиска запроса, таких как предложение WHERE, возвращающих точные соответствия.
Вопросы работы со столбцами
Рассмотрите столбцы, обладающие одним или несколькими указанными ниже атрибутами:
- Покрытие запроса.
Производительность повышается в тех случаях, когда индекс содержит все столбцы запроса. Оптимизатор запросов может обнаружить все значения столбцов внутри данного индекса; необходимость в обращении к таблицам или данным кластеризованных индексов отпадает, в результате чего снижается интенсивность дисковых операций ввода-вывода. Для расширения покрытия столбцов не следует создавать широкий ключ индекса; используйте индекс с включенными столбцами. Дополнительные сведения см. в разделе Индекс с включенными столбцами.
Если таблица имеет кластеризованный индекс, то столбец или столбцы, определенные в этом кластеризованном индексе, автоматически добавляются к концу каждого некластеризованного индекса таблицы. Это может привести к возникновению покрытого запроса без указания столбцов кластеризованного индекса в определении некластеризованного индекса. Так, если для таблицы имеется кластеризованный индекс столбца В, то некластеризованный индекс столбцов Б и A будет иметь в качестве ключевых значений столбцы Б, A и В. - Множество индивидуальных значений, таких как сочетание фамилии и имени, если кластеризованный индекс используется для других столбцов.
Если имеется очень мало индивидуальных значений, скажем, только 1 и 0, то при выполнении большинства запросов этот индекс не будет использоваться, так как эффективность просмотра таблиц, как правило, выше.
Параметры индексов
Существует несколько параметров индексов, которые можно использовать при создании некластеризованного индекса. Особое внимание нужно уделять следующим параметрам:
- FILLFACTOR
- ONLINE
Дополнительные сведения см. в разделе Установка параметров индекса.
См. также
Основные понятия
Создание индексов (компонент Database Engine)
Общие рекомендации по проектированию индексов
Индекс с включенными столбцами