Criar índices com colunas incluídas

Você pode ampliar um índice não clusterizado incluindo colunas não chave, além das colunas de chave de índice. As colunas não chave são armazenadas no nível folha do índice árvore B.

Índices que incluem colunas não chave fornecem o maior benefício quando cobrem a consulta. Isso significa que os índices incluem todas as colunas referenciadas pela consulta. Para obter mais informações, consulte Índice com colunas incluídas.

Requisitos para espaço em disco

Adicionar colunas não chave ao índice usa mais espaço em disco para armazenar o índice. Em particular, adicionar tipos de dados varchar(max), nvarchar(max), varbinary(max)ou xml como colunas não chave pode aumentar significativamente os requisitos de espaço em disco, porque os valores de coluna são copiados no nível folha de índice e também permanecem na tabela ou índice clusterizado.

O processo para determinar os requisitos de espaço em disco para índices com colunas incluídas é igual ao processo para índices não clusterizados. Para obter informações, consulte Determinando requisitos de espaço em disco de índice.

Considerações sobre desempenho

Ganhos de desempenho são alcançados em operações de seleção porque o otimizador de consulta pode localizar todos os dados de coluna exigidos dentro do índice; a tabela ou índice clusterizado não são acessados. Entretanto, ter muitas colunas incluídas poder aumentar o tempo necessário para executar operações de inserção, atualização ou exclusão à tabela subjacente ou exibição indexada por causa da manutenção aumentada do índice.

Exemplos

A. Cobrindo uma consulta

O exemplo a seguir cria um índice não clusterizado na tabela Person.Address com quatro colunas incluídas. A coluna chave do índice é PostalCode e as colunas não chave são AddressLine1, AddressLine2, City, e StateProvinceID.

USE AdventureWorks2008R2;
GO
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
GO

Esta consulta será coberta pelo índice.

SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN '98000' and '99999';
GO

B. Excedendo a limitação de tamanho do índice

No exemplo a seguir, a cláusula INCLUDE da instrução CREATE INDEX é usada para indexar colunas que normalmente excederiam a limitação máxima do tamanho da coluna chave, de 900 bytes. A tabela Production.ProductReview contém estas colunas ProductID(int), ReviewerName(nvarchar (50)) e Comments (nvarchar (3850)). Estas colunas são frequentemente usadas em consultas, mas a coluna Comments é muito grande para participar como coluna chave do índice. Porém, usando a cláusula INCLUDE, a coluna Comments pode ser adicionada como uma coluna não chave no índice.

USE AdventureWorks2008R2;
GO
CREATE NONCLUSTERED INDEX IX_ProductReview_ProductID_ReviewerName
ON Production.ProductReview (ProductID, ReviewerName)
INCLUDE (Comments);
GO

Esta consulta será coberta pelo índice.

SELECT Comments
FROM Production.ProductReview 
WHERE ProductID = 937;
GO

Para criar um índice com colunas incluídas