Поделиться через


Создание некластеризованных индексов

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

Типичная реализация

Некластеризованные индексы реализуются следующим образом.

  • Ограничениями PRIMARY KEY и UNIQUE

    Если кластеризованный индекс в таблице еще не создан, а уникальный некластеризованный индекс еще не указан, то при создании ограничения PRIMARY KEY в одном или нескольких столбцах автоматически создается уникальный кластеризованный индекс. В столбце первичного ключа недопустимы значения NULL.

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

  • Индекс, не зависящий от ограничения

    По умолчанию некластеризованный индекс создается в том случае, если ранее не был задан кластеризованный индекс. Для таблицы может быть создано не более 999 некластеризованных индексов. В это число входят любые индексы, созданные ограничениями PRIMARY KEY или UNIQUE, но не входят XML-индексы.

  • Некластеризованный индекс в индексированном представлении

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

Индекс с включенными столбцами

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

Индекс с предикатом фильтра

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

Дополнительные сведения см. в разделе Рекомендации по проектированию отфильтрованных индексов.

Требования к свободному месту на диске

Дополнительные сведения о требованиях свободного места на диске при использовании некластеризованных индексов см. в разделе Определение требований к месту на диске для индексов.

Вопросы производительности

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

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

  • Увеличение места на диске, требуемого для хранения индекса.

  • Увеличение времени, требуемого на модификацию базовой таблицы или базового индексированного представления (для операций вставки, обновления, удаления и слияния).

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

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

Создание ограничения PRIMARY KEY или UNIQUE при создании таблицы

Инструкция CREATE TABLE (Transact-SQL)

Создание ограничения PRIMARY KEY или UNIQUE для существующей таблицы

ALTER TABLE (Transact-SQL)

Создание индекса

CREATE INDEX (Transact-SQL)