Создание индексов с включенными столбцамиCreate Indexes with Included Columns

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server (начиная с версии 2016)даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

В этой теме описывается добавление невключенных или неключевых столбцов, чтобы расширить функциональные возможности некластеризованных индексов в SQL ServerSQL Server при помощи среды SQL Server Management StudioSQL Server Management Studio или Transact-SQLTransact-SQL.This topic describes how to add included (or nonkey) columns to extend the functionality of nonclustered indexes in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Добавление неключевых столбцов позволяет создавать некластеризованные индексы, покрывающие больше запросов.By including nonkey columns, you can create nonclustered indexes that cover more queries. Это обусловлено следующими преимуществами неключевых столбцов.This is because the nonkey columns have the following benefits:

  • Они могут содержать типы данных, не разрешенные для ключевых столбцов индекса.They can be data types not allowed as index key columns.

  • Они не учитываются компонентом Компонент Database EngineDatabase Engine при расчете числа ключевых столбцов индекса и размера ключа индекса.They are not considered by the Компонент Database EngineDatabase Engine when calculating the number of index key columns or index key size.

    Индекс с неключевыми столбцами может значительно повысить производительность запроса, когда все столбцы запроса включены в индекс как ключевые или неключевые.An index with nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. Производительность повышается благодаря тому, что оптимизатор запросов может найти все значения столбцов в этом индексе; при этом нет обращения к данным таблиц или кластеризованных индексов, что приводит к меньшему количеству дисковых операций ввода-вывода.Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.

Примечание

Если индекс содержит все столбцы, на которых в запросе имеются ссылки, это обычно называется покрытием запроса.When an index contains all the columns referenced by a query it is typically referred to as covering the query.

В этом разделеIn This Topic

Перед началом Before You Begin

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

  • Переопределите некластеризованные индексы с большим размером ключа индекса, чтобы только столбцы, используемые для поиска и уточняющего запроса, были ключевыми.Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. Все остальные столбцы, покрывающие запрос, сделайте неключевыми столбцами.Make all other columns that cover the query into nonkey columns. Таким образом, в наличии будут все столбцы, покрывающие запрос, но сам ключ индекса будет небольшим и эффективным.In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • Включите неключевые столбцы в некластеризованный индекс, чтобы не превышать существующие ограничения на размер индекса (32 столбца) и размер ключа индекса (1 700 байт). До версии SQL Server 2016SQL Server 2016 использовались ограничения в 16 столбцов и 900 байт.Include nonkey columns in a nonclustered index to avoid exceeding the current index size limitations of a maximum of 32 key columns and a maximum index key size of 1,700 bytes (16 key columns and 900 bytes prior to SQL Server 2016SQL Server 2016). Компонент Компонент Database EngineDatabase Engine не учитывает неключевые столбцы при расчете количества ключевых столбцов индекса и размера ключа индекса.The Компонент Database EngineDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

Ограничения Limitations and Restrictions

  • Неключевые столбцы можно задавать только для некластеризованных индексов.Nonkey columns can only be defined on nonclustered indexes.

  • Все типы данных, за исключением text, ntext, и image могут использоваться как неключевые столбцы.All data types except text, ntext, and image can be used as nonkey columns.

  • Вычисляемые столбцы, являющиеся детерминированными, в том числе точными или неточными, могут быть неключевыми столбцами.Computed columns that are deterministic and either precise or imprecise can be nonkey columns. Дополнительные сведения см. в разделе Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

  • Вычисляемые столбцы, полученные на основе типов данных image, ntextи text , могут быть неключевыми столбцами, если тип данных этого вычисляемого столбца допустим в качестве неключевого индексного столбца.Computed columns derived from image, ntext, and text data types can be nonkey columns as long as the computed column data type is allowed as a nonkey index column.

  • Неключевые столбцы можно удалить из таблицы только после удаления из этой таблицы индекса.Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • Неключевые столбцы нельзя изменять, за исключением следующих операций:Nonkey columns cannot be changed, except to do the following:

    • изменение поведения столбца в отношении значения NULL с NOT NULL на NULL;Change the nullability of the column from NOT NULL to NULL.

    • увеличение длины столбцов типов varchar, nvarcharи varbinary .Increase the length of varchar, nvarchar, or varbinary columns.

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

Разрешения Permissions

Необходимо разрешение ALTER для таблицы или представления.Requires ALTER permission on the table or view. Пользователь должен быть членом предопределенной роли сервера sysadmin или предопределенных ролей базы данных db_ddladmin и db_owner .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

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

Создание индекса с неключевыми столбцамиTo create an index with nonkey columns

  1. В обозревателе объектов щелкните знак «плюс», чтобы развернуть базу данных, содержащую таблицу, в которой необходимо создать индекс с неключевыми столбцами.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to create an index with nonkey columns.

  2. Чтобы развернуть папку Таблицы , щелкните значок «плюс».Click the plus sign to expand the Tables folder.

  3. Щелкните знак «плюс», чтобы развернуть таблицу, в которой необходимо создать индекс с неключевыми столбцами.Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. Щелкните правой кнопкой мыши папку Индексы , выберите Создать индекси Некластеризованный индекс…Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. В диалоговом окне Создание индекса на странице Общие введите имя нового индекса в поле Имя индекса .In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. На вкладке Ключевые столбцы индекса нажмите кнопку Добавить….Under the Index key columns tab, click Add….

  7. В диалоговом окне Выбор столбцов изимя_таблицы установите флажки для столбцов таблицы, добавляемых к индексу.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index.

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

  9. На вкладке Включенные столбцы нажмите кнопку Добавить….Under the Included columns tab, click Add….

  10. В диалоговом окне Выбор столбцов изимя_таблицы установите флажки для столбцов таблицы, добавляемых в индекс в качестве неключевых столбцов.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index as nonkey columns.

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

  12. В диалоговом окне Создание индекса нажмите кнопку ОК.In the New Index dialog box, click OK.

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

Создание индекса с неключевыми столбцамиTo create an index with nonkey columns

  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database EngineDatabase Engine.In Object Explorer, connect to an instance of Компонент Database EngineDatabase Engine.

  2. На стандартной панели выберите пункт Создать запрос.On the Standard bar, click New Query.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.Copy and paste the following example into the query window and click Execute.

    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).For more information, see CREATE INDEX (Transact-SQL).