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

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

В этом разделе описывается добавление включенных (или неключевых) столбцов для расширения функциональных возможностей некластеризованных индексов в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Добавление неключевых столбцов позволяет создавать некластеризованные индексы, покрывающие больше запросов. Это обусловлено следующими преимуществами неключевых столбцов.

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

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

Заметка

Если индекс содержит все столбцы, на которых в запросе имеются ссылки, это обычно называется покрытием запроса.

Перед началом

Рекомендации по проектированию

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

  • Включите некластеризованные столбцы в некластеризованный индекс, чтобы избежать превышения текущих ограничений размера индекса не более 32 ключевых столбцов и максимального размера ключа индекса размером 1700 байт (16 ключевых столбцов и 900 байт до SQL Server 2016 (13.x)). Ядро СУБД не учитывает неключевые столбцы при вычислении количества ключевых столбцов индекса или размера ключа индекса.

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

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

ограничения

  • Неключевые столбцы можно задавать только для некластеризованных индексов.

  • Все типы данных, за исключением text, ntext, и image могут использоваться как неключевые столбцы.

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

  • Вычисляемые столбцы, полученные на основе типов данных image, ntextи text , могут быть неключевыми столбцами, если тип данных этого вычисляемого столбца допустим в качестве неключевого индексного столбца.

  • Неключевые столбцы можно удалить из таблицы только после удаления из этой таблицы индекса.

  • Неключевые столбцы нельзя изменять, за исключением следующих операций:

    • изменение поведения столбца в отношении значения NULL с NOT NULL на NULL;

    • увеличение длины столбцов типов varchar, nvarcharи varbinary .

Безопасность

Разрешения

Необходимо разрешение ALTER для таблицы или представления. Пользователь должен быть членом предопределенной роли сервера sysadmin или предопределенных ролей базы данных db_ddladmin и db_owner.

Использование среды SQL Server Management Studio

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

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо создать индекс с неключевыми столбцами.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо создать индекс с неключевыми столбцами.

  4. Щелкните правой кнопкой мыши папку Индексы, выберите Создать индекс и Некластеризованный индекс...

  5. В диалоговом окне Создание индекса на странице Общие введите имя нового индекса в поле Имя индекса .

  6. На вкладке Ключевые столбцы индекса нажмите кнопку Добавить….

  7. В диалоговом окне Выбор столбцов изимя_таблицы установите флажки для столбцов таблицы, добавляемых к индексу.

  8. Щелкните OK.

  9. На вкладке Включенные столбцы нажмите кнопку Добавить….

  10. В диалоговом окне Выбор столбцов изимя_таблицы установите флажки для столбцов таблицы, добавляемых в индекс в качестве неключевых столбцов.

  11. Щелкните OK.

  12. В диалоговом окне Создание индекса нажмите кнопку ОК.

Использование Transact-SQL

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

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2022;  
    GO  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

Инструкция CREATE INDEX (Transact-SQL)
Руководство по проектированию индексов SQL Server