Criar índices clusterizados
Você pode criar índices clusterizados em tabelas no SQL Server 2014 usando SQL Server Management Studio ou Transact-SQL. Com poucas exceções, toda tabela deveria ter um índice clusterizado. Além de melhorar o desempenho da consulta, o índice clusterizado pode ser recompilado ou reorganizado sob demanda para controlar a fragmentação de tabela. Um índice clusterizado também pode ser criado em uma exibição. (Os índices clusterizados são definidos no tópico Índices clusterizados e não clusterizados descritos.)
Neste tópico
Antes de começar:
Para criar um índice clusterizado em uma tabela, usando:
Antes de começar
Implementações comuns
Os índices clusterizados são implementados das seguintes maneiras:
Restrições PRIMARY KEY e UNIQUE
Quando se cria uma restrição PRIMARY KEY, é criado automaticamente um índice clusterizado exclusivo na coluna ou a coluna é automaticamente criada se não existir um índice clusterizado na tabela 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.
O índice criado como parte da restrição recebe automaticamente o mesmo nome da restrição. Para obter mais informações, consulte Primary and Foreign Key Constraints e Unique Constraints and Check Constraints.
Índice independente de uma 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.
Limitações e Restrições
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 Disk Space Requirements for Index DDL Operations.
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 clusterização 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 a definição da opção ONLINE como ON ao 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 Perform Index Operations Online.
A chave de um índice clusterizado não pode conter colunas
varchar
que tenham dados existentes na unidade de alocação ROW_OVERFLOW_DATA. Se um índice clusterizado for criado em uma colunavarchar
e os dados existentes estiverem na unidade de alocação IN_ROW_DATA, as ações subsequentes de inserção ou atualização na coluna que faria o push dos dados da linha apresentarão falha. Para obter informações sobre tabelas que podem conter dados de estouro de linha, use a função de gerenciamento dinâmico sys.dm_db_index_physical_stats (Transact-SQL ).
Segurança
Permissões
Requer a permissão ALTER na tabela ou exibição. 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 .
Como usar o SQL Server Management Studio.
Para criar um índice clusterizado usando o Pesquisador de Objetos
No Pesquisador de Objetos, expanda a tabela na qual você deseja criar um índice clusterizado.
Clique com o botão direito do mouse na pasta Índices, aponte para Novo Índice e selecione Índice Clusterizado....
Na caixa de diálogo Novo Índice , na página Geral , insira o nome do novo índice na caixa Nome do índice .
Em Colunas de chave de índice, clique em Adicionar... .
Na caixa de diálogo Selecionar Colunas dotable_name, selecione a caixa marcar da coluna da tabela a ser adicionada ao índice clusterizado.
Clique em OK.
Na caixa de diálogo Novo Índice , clique em OK.
Para criar um índice clusterizado usando o Designer de Tabela
No Pesquisador de Objetos, expanda o banco de dados na qual você deseja criar uma tabela com um índice clusterizado.
Clique com o botão direito do mouse na pasta Tabelas e clique em Nova Tabela....
Crie uma tabela como você faria normalmente. Para obter mais informações, consulte Criar tabelas (Mecanismo de Banco de Dados).
Clique com o botão direito do mouse na tabela criada acima e selecione Design.
No menu Designer de Tabela , clique em Índices/Chaves.
Na caixa de diálogo Índices/Chaves , clique em Adicionar.
Selecione o novo índice na caixa de texto Índice ou Chave Exclusiva/Primária Selecionada .
Na grade, selecione Criar como Clusterizadoe selecione Sim na lista suspensa, à direita da propriedade.
Clique em fechar
No menu Arquivo , clique em Salvartable_name.
Usando o Transact-SQL
Para criar um índice clusterizado
No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.
Na barra Padrão, clique em Nova Consulta.
Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.
USE AdventureWorks2012; GO -- Create a new table with three columns. CREATE TABLE dbo.TestTable (TestCol1 int NOT NULL, TestCol2 nchar(10) NULL, TestCol3 nvarchar(50) NULL); GO -- Create a clustered index called IX_TestTable_TestCol1 -- on the dbo.TestTable table using the TestCol1 column. CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1); GO
Para obter mais informações, veja CREATE INDEX (Transact-SQL).