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

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

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

  • Они не учитываются компонентом Компонент Database Engine при расчете числа ключевых столбцов индекса и размера ключа индекса.

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

ПримечаниеПримечание

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

В этом разделе

  • Перед началом работы выполните следующие действия.

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

    Ограничения

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

  • Создание индекса с неключевыми столбцами с помощью различных средств.

    Среда SQL Server Management Studio

    Transact-SQL

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

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

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

  • Включите неключевые столбцы в некластеризованный индекс, чтобы избежать превышения текущих ограничений на размер индекса (16 ключевых столбцов) и размер ключа индекса (900 байт). Компонент Компонент Database Engine не учитывает неключевые столбцы при расчете количества ключевых столбцов индекса и размера ключа индекса.

Ограничения

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

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

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

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

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

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

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

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

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

Разрешения

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

Значок стрелки, используемый со ссылкой «В начало»[Top]

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

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

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

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

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

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

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

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

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

  8. Нажмите кнопку ОК.

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

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

  11. Нажмите кнопку ОК.

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

Значок стрелки, используемый со ссылкой «В начало»[Top]

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

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

  1. В обозревателе объектов установите соединение с экземпляром компонента Компонент Database Engine.

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

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

    USE AdventureWorks2012;
    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).

Значок стрелки, используемый со ссылкой «В начало»[Top]