Criar índices com colunas incluídasCreate Indexes with Included Columns

Este tópico aplica-se a: Simdo SQL ServerSimbanco de dados do SQL AzuresemAzure SQL Data Warehouse sem Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Este tópico descreve como adicionar colunas incluído (ou não chave) para estender a funcionalidade de índices não clusterizados no SQL ServerSQL Server usando o SQL Server Management StudioSQL Server Management Studio ou o 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. Ao incluir colunas não chave, você pode criar você índices não clusterizados que abrangem mais consultas.By including nonkey columns, you can create nonclustered indexes that cover more queries. Isto porque as colunas não chave têm os seguintes benefícios:This is because the nonkey columns have the following benefits:

  • Elas podem ser tipos de dados não permitidos como colunas de chave de índice.They can be data types not allowed as index key columns.

  • Eles não são considerados pelo Mecanismo de Banco de DadosDatabase Engine ao calcular o número de colunas de chave de índice ou o tamanho da chave de índice.They are not considered by the Mecanismo de Banco de DadosDatabase Engine when calculating the number of index key columns or index key size.

    Um índice com colunas não chave pode melhorar o desempenho de consulta significativamente quando todas as colunas na consulta são incluídas no índice como colunas de chave ou não chave.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. Os ganhos de desempenho são alcançados pois o otimizador de consulta pode localizar todos os valores de coluna dentro do índice, a tabela, ou dados de índice clusterizado não são acessados, resultando em poucas operações de E/S de disco.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.

Observação

Quando um índice contém todas as colunas referenciadas por uma consulta, ele costuma ser referenciado como se abrangendo a consulta.When an index contains all the columns referenced by a query it is typically referred to as covering the query.

Neste tópicoIn This Topic

Antes de começarBefore You Begin

Recomendações de designDesign Recommendations

  • Redesenhe índices não clusterizados com um comprimento de chave de índice, de tal forma que apenas as colunas usadas para buscas e pesquisas sejam colunas de chave.Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. Transforme todas as outras colunas que abrangem a consulta em colunas não chave.Make all other columns that cover the query into nonkey columns. Deste modo, você terá todas as colunas necessárias para abranger a consulta, mas a chave de índice em si é pequena e eficiente.In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • Inclua colunas não chave em um índice não clusterizado para evitar exceder as limitações do tamanho atual do índice de um máximo de 32 colunas de chave e um tamanho máximo de chave de índice de 1.700 bytes (16 colunas de chave e 900 bytes antes de SQL Server 2016SQL Server 2016).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). O Mecanismo de Banco de DadosDatabase Engine não considera as colunas não chave ao calcular o número de colunas de chave de índice, ou o tamanho da chave do índice.The Mecanismo de Banco de DadosDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

Limitações e restriçõesLimitations and Restrictions

  • As colunas não chave só podem ser definidas em índices não clusterizados.Nonkey columns can only be defined on nonclustered indexes.

  • Todos os tipos de dados, exceto text, ntexte image , podem ser usados como colunas não chave.All data types except text, ntext, and image can be used as nonkey columns.

  • As colunas computadas que são determinísticas e precisas ou imprecisas podem ser colunas não chave.Computed columns that are deterministic and either precise or imprecise can be nonkey columns. Para obter mais informações, consulte Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

  • As colunas computadas derivadas dos tipos de dados image, ntexte text podem ser colunas não chave, desde que o tipo de dados da coluna computada seja permitido como uma coluna de índice não chave.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.

  • As colunas não chave não podem ser descartadas de uma tabela, a menos que o índice dessa tabela seja descartado primeiro.Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • As colunas não chave não podem ser alteradas, exceto para fazerem o seguinte:Nonkey columns cannot be changed, except to do the following:

    • Alterar a nulidade da coluna da coluna NOT NULL até NULL.Change the nullability of the column from NOT NULL to NULL.

    • Aumente o tamanho das colunas varchar, nvarcharou varbinary .Increase the length of varchar, nvarchar, or varbinary columns.

SegurançaSecurity

PermissõesPermissions

Requer a permissão ALTER na tabela ou exibição.Requires ALTER permission on the table or view. O usuário deve ser membro da função de servidor fixa sysadmin ou das funções de banco de dados fixas db_ddladmin e db_owner .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Usando o SQL Server Management StudioUsing SQL Server Management Studio

Para criar um índice com colunas não chaveTo create an index with nonkey columns

  1. No Pesquisador de Objetos, clique no sinal de adição para expandir o banco de dados que contém a tabela na qual você deseja criar um índice com colunas não chave.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. Clique no sinal de adição para expandir a pasta Tabelas .Click the plus sign to expand the Tables folder.

  3. Clique no sinal de adição para expandir a tabela na qual você deseja criar um índice com colunas não chave.Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. Clique com o botão direito do mouse na pasta Índices , aponte para Novo Índicee selecione Índice Não Clusterizado….Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. Na caixa de diálogo Novo Índice , na página Geral , insira o nome do novo índice na caixa Nome do índice .In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. Na guia Colunas de chave de índice , clique em Adicionar….Under the Index key columns tab, click Add….

  7. Na caixa de diálogo Selecionar Colunas detable_name , marque as caixas de seleção das colunas da tabela a serem adicionadas ao índice.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. Clique em OK.Click OK.

  9. Na guia Colunas incluídas , clique em Adicionar….Under the Included columns tab, click Add….

  10. Na caixa de diálogo Selecionar Colunas detable_name , marque as caixas de seleção das colunas da tabela ou a serem adicionadas ao índice como colunas não chave.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. Clique em OK.Click OK.

  12. Na caixa de diálogo Novo Índice , clique em OK.In the New Index dialog box, click OK.

Usando Transact-SQLUsing Transact-SQL

Para criar um índice com colunas não chaveTo create an index with nonkey columns

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de DadosDatabase Engine.In Object Explorer, connect to an instance of Mecanismo de Banco de DadosDatabase Engine.

  2. Na barra Padrão, clique em Nova Consulta.On the Standard bar, click New Query.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.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  
    

    Para obter mais informações, consulte CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).