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 AdventureWorks;
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 freqüentemente 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 AdventureWorks;
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