Criar índices clusterizados
Você pode criar índices clusterizados em tabelas no SQL Server 2012 usando o SQL Server Management Studio ou o 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:
Implementações comuns
Limitações e restrições
Segurança
Para criar um índice clusterizado em uma tabela, usando:
SQL Server Management Studio
Transact-SQL
Antes de começar
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 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.
O índice criado como parte da restrição recebe automaticamente o mesmo nome da restrição. Para obter mais informações, consulte Restrições de chave primária e chave estrangeira e Restrições exclusivas e restrições de verificação.
Í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 Requisitos de espaço em disco para operações de índice DDL.
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 Executar operações de índice 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 coluna varchar 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 as 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.
[Top]
Usando 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.
Na guia Colunas de chave de índice, clique em Adicionar….
Na caixa de diálogo Selecionar Colunas de table_name, marque a caixa de seleção das colunas de tabela a serem adicionadas 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 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 Clusterizado e selecione Sim na lista suspensa, à direita da propriedade.
Clique em Fechar.
No menu Arquivo, clique em Salvar table_name.
[Top]
Usando 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, consulte CREATE INDEX (Transact-SQL).
[Top]