Compartilhar via


Criando índices clusterizados

Com poucas exceções, toda tabela deveria ter um índice clusterizado. Além de melhorar o desempenho da consulta, o índice clusterizado pode ser recriado ou reorganizado sob demanda para controlar a fragmentação de tabela. Um índice clusterizado também pode ser criado em uma exibição.

Implementações comuns

Os índices 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 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 existam índices clusterizados na tabela.

    O índice criado como parte da restrição recebe automaticamente o mesmo nome da restrição. Para obter mais informações, consulte Restrições PRIMARY KEY e Restrições UNIQUE.

  • Índice independente de restrição

    Você pode criar um índice clusterizado em uma coluna diferente da coluna de chave primária se uma restrição de chave primária não-clusterizada tiver sido especificada.

  • Exibição indexada

    Para criar uma exibição indexada, um índice clusterizado exclusivo é definido em uma ou mais colunas de exibição. A exibição é materializada e o conjunto de resultados é armazenado no nível folha do índice da mesma forma que os dados de tabela são armazenados em um índice clusterizado. Para obter mais informações, consulte Criando exibições indexadas.

Seleção de coluna de chave

Como só é possível ter um índice clusterizado por tabela, determinar em que colunas criar um índice clusterizado é muito importante. Para obter mais informações sobre como selecionar a coluna correta, consulte Diretrizes de design de índices clusterizados.

A chave de índice de um índice clusterizado não pode conter colunas varchar com dados existentes na unidade de alocação ROW_OVERFLOW_DATA. Se o índice clusterizado for criado em uma coluna varchar e os dados existentes constarem da unidade de alocação IN_ROW_DATA, as ações de entrada e atualização subseqüentes na coluna que extrai os dados da linha falharão. Para obter mais informações sobre unidades de alocação, consulte Organização de tabela e índice.

Requisitos de espaço em disco

Quando uma estrutura de índice clusterizado é criada, o espaço em disco de ambas as estruturas, a antiga (origem) e a nova (destino), é necessário em seus respectivos arquivos e grupos de arquivos. A antiga estrutura não é desalocada até que a transação completa seja confirmada. Pode igualmente ser necessário espaço temporário em disco adicional, para classificação. Para obter mais informações, consulte Determinando requisitos de espaço em disco de índice.

Considerações sobre desempenho

Se um índice clusterizado for criado em uma pilha com vários índices não-clusterizados existentes, todos os índices não-clusterizados deverão ser recriados de modo que contenham o valor de chave de clustering em vez do RID (Identificador de Linha). Da mesma forma, se um índice clusterizado for cancelado em uma tabela com vários índices não-clusterizados, os índices não-clusterizados serão todos recriados como parte da operação DROP. Isso pode despender um tempo significativo em tabelas grandes.

A forma preferencial de criação de índices em tabelas grandes é iniciar com o índice clusterizado e depois criar os índices não-clusterizados. Considere definir a opção ONLINE como ON para criar índices em tabelas existentes. Quando definidos como ON, os bloqueios de tabela não são mantidos a longo prazo. Isso permite consultas ou atualizações à tabela subjacente para continuar. Para obter mais informações, consulte Executando operações de índice online.

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

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

Para criar um índice