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


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

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

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

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

  • Ограничения PRIMARY KEY и UNIQUE
    Если кластерный индекс в таблице еще не создан, а уникальный некластеризованный индекс еще не указан, то при создании ограничения PRIMARY KEY в одном или нескольких столбцах автоматически создается уникальный кластеризованный индекс. В столбце первичного ключа недопустимы значения NULL.
    При создании ограничения UNIQUE создается уникальный некластеризованный индекс. Он нужен, чтобы принудительно применять ограничение UNIQUE по умолчанию. Если кластеризованный индекс в таблице еще не создан, то можно указать уникальный кластеризованный индекс. Дополнительные сведения см. в разделах Ограничения PRIMARY KEY и Ограничения UNIQUE.
  • Индекс, не зависящий от ограничения
    По умолчанию некластеризованный индекс создается в том случае, если ранее не был задан кластеризованный индекс. В каждой таблице можно создать не более 249 некластеризованных индексов. К ним относятся индексы, созданные с помощью ограничений UNIQUE или PRIMARY и не содержащие XML-индексы.
  • Некластеризованный индекс в индексированном представлении
    Некластеризованные индексы в представлении могут создаваться только после создания в нем уникального кластеризованного индекса. Дополнительные сведения см. в разделе Создание индексированных представлений.

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

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

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

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

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

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

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

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

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

CREATE TABLE (Transact-SQL)

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

ALTER TABLE (Transact-SQL)

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

CREATE INDEX (Transact-SQL)

См. также

Основные понятия

Создание индексов (компонент Database Engine)
Правила проектирования некластеризованных индексов

Справка и поддержка

Получение помощи по SQL Server 2005