Создание некластеризованных индексов
Можно создать несколько некластеризованных индексов для таблицы или индексированного представления. Обычно некластеризованные индексы создаются с целью повышения производительности часто используемых запросов, не входящих в кластеризованный индекс.
Типичная реализация
Некластеризованные индексы реализуются следующим образом.
Ограничениями 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 для существующей таблицы
Создание индекса
См. также