Criando índices não clusterizados

Você pode criar vários índices não clusterizados em uma tabela ou exibição indexada. Geralmente, os índices não clusterizados são criados para aprimorar o desempenho de consultas utilizadas com frequência não cobertas pelo índice clusterizado.

Implementações comuns

Os índices não clusterizados são implementados das seguintes maneiras:

  • Restrições PRIMARY KEY e UNIQUE

    Quando você cria uma restrição PRIMARY KEY, um índice clusterizado exclusivo é automaticamente criado na coluna ou nas colunas, se um índice clusterizado na tabela ainda não existir e você não especificar um índice não clusterizado exclusivo. A coluna de chave primária não pode permitir valores NULL.

    Quando se cria uma restrição UNIQUE, é criado, por padrão, um índice não clusterizado exclusivo para impor uma restrição UNIQUE por padrão. Você pode especificar um índice clusterizado exclusivo caso ainda não exista um índice clusterizado na tabela. Para obter mais informações, consulte Restrições PRIMARY KEY e Restrições UNIQUE.

  • Índice independente de uma restrição

    Por padrão, será criado um índice não clusterizado se não for especificado como clusterizado. O número máximo de índices não clusterizados que podem ser criados em uma tabela é 999. Isso inclui qualquer índice criado por restrições PRIMARY KEY ou UNIQUE, mas não inclui índices XML.

  • Índice não clusterizado em uma exibição indexada

    Depois que for criado um índice clusterizado exclusivo em uma exibição, poderão ser criados índices não clusterizados. Para obter mais informações, consulte Criando exibições indexadas.

Índice com colunas incluídas

Quando um índice não clusterizado é criado para abranger uma consulta, você pode incluir colunas não chave na definição do índice para abranger as colunas na consulta que não são utilizadas como colunas de pesquisa primárias. São obtidos ganhos de desempenho porque o otimizador de consulta pode localizar todos os dados de coluna exigidos dentro do índice; a tabela ou o índice clusterizado não são acessados. Para obter mais informações, consulte Índice com colunas incluídas.

Índice com predicado de filtro

Um índice filtrado é um índice não clusterizado otimizado, criado especialmente para consultas que fazem seleções a partir de um subconjunto bem-definido de dados. Ele usa um predicado de filtro para indexar uma parte das linhas da tabela. Um índice filtrado bem projetado pode melhorar o desempenho da consulta e reduzir os custos de manutenção e armazenamento do índice em comparação com os índices de tabela completa.

Para obter mais informações, consulte Diretrizes de criação de índice filtrado.

Requisitos de espaço em disco

Para obter informações sobre requisitos de espaço em disco para índices não clusterizados, consulte Determinando requisitos de espaço em disco de índice.

Considerações sobre desempenho

Embora seja importante que o índice contenha todas as colunas utilizadas pela consulta, evite adicionar colunas desnecessariamente. Adicionar muitas colunas de índice, sejam elas chave ou não, poderá ter as seguintes ramificações no desempenho:

  • Menos linhas de índice caberão em uma página causando o aumento de E/S no disco e redução na eficiência do cache.

  • Será necessário mais espaço em disco para armazenar o índice.

  • A manutenção do índice poderá aumentar o tempo necessário para executar modificações, inserções, atualizações, exclusões ou mesclagens na tabela subjacente ou exibição indexada.

Você deve determinar se os ganhos no desempenho de consulta superam o efeito no desempenho durante a modificação de dados e em exigências de espaço em disco adicional. Para obter mais informações sobre como avaliar o desempenho de consulta, consulte Ajuste de consulta.

Considere o uso de um índice filtrado para aprimorar o desempenho quando os dados da tabela têm colunas com subconjuntos de linhas bem definidos, por exemplo, colunas esparsas, colunas com grande maioria de valores NULL, colunas com categorias de valores e colunas com intervalos diferentes de valores. Para obter mais informações, consulte Diretrizes de criação de índice filtrado.

Para criar uma restrição PRIMARY KEY ou UNIQUE quando você cria uma tabela

CREATE TABLE (Transact-SQL)

Para criar uma restrição PRIMARY KEY ou UNIQUE em uma tabela existente

ALTER TABLE (Transact-SQL)

Para criar um índice

CREATE INDEX (Transact-SQL)