Criar índices exclusivos
Este tópico descreve como criar um índice exclusivo em uma tabela no SQL Server 2012 usando o SQL Server Management Studio ou o Transact-SQL. Um índice exclusivo garante que a chave de índice não contém nenhum valor duplicado, e então, cada linha na tabela é exclusiva de algum modo. Não existe nenhuma diferença significativa entre criar uma restrição UNIQUE e criar um índice exclusivo que seja independente de uma restrição. A validação de dados ocorre da mesma maneira, e o otimizador de consultas não diferencia entre um índice exclusivo criado por uma restrição ou manualmente criado. No entanto, criar uma restrição UNIQUE na coluna torna claro o objetivo do índice. Para obter mais informações sobre restrições UNIQUE, consulte Restrições exclusivas e restrições de verificação.
Quando você criar um índice exclusivo, será possível definir uma opção para ignorar chaves duplicadas. Se essa opção for definida como Sim e você tentar criar chaves duplicadas adicionando dados que afetem várias linhas (com a instrução INSERT), a linha que contém uma duplicata não será adicionada. Se ela for definida como Não, ocorrerá falha em toda a operação de inserção e todos os dados serão revertidos.
Observação |
---|
Você não poderá criar um índice exclusivo em uma única coluna se ela tiver NULL em mais de uma linha. Da mesma forma, você não poderá criar um índice exclusivo em várias colunas se a combinação de colunas tiver NULL em mais de uma linha. Isso é tratado como valores duplicados para fins de indexação. |
Neste tópico
Antes de começar:
Benefícios de um índice exclusivo
Implementações comuns
Limitações e restrições
Segurança
Para criar um índice exclusivo em uma tabela usando:
SQL Server Management Studio
Transact-SQL
Antes de começar
Benefícios de um índice exclusivo
Índices exclusivos de multicolunas garantem que cada combinação de valores na chave de índice é exclusivo. Por exemplo, se um índice exclusivo for criado em uma combinação de colunas LastName, FirstName e MiddleName, duas linhas na tabela não poderão ter a mesma combinação de valores que essas colunas.
Contanto que os dados em cada coluna sejam exclusivos, você pode criar um índice clusterizado exclusivo e vários índices exclusivos não clusterizados na mesma tabela.
Os índices exclusivos garantem a integridade de dados das colunas definidas.
Índices exclusivos fornecem informações adicionais úteis para o otimizador de consulta que pode gerar planos de execução mais eficientes.
Implementações comuns
Os índices exclusivos são implementados das seguintes maneiras:
Restrição PRIMARY KEY ou 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.
Para obter mais informações, consulte Restrições exclusivas e restrições de verificação e Restrições de chave primária e chave estrangeira.
Índice independente de uma restrição
Vários índices não clusterizado exclusivos podem ser definidos em uma tabela.
Para obter mais informações, consulte CREATE INDEX (Transact-SQL).
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 é executada 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 Criar exibições indexadas.
Limitações e restrições
Um índice exclusivo, uma restrição UNIQUE ou uma restrição PRIMARY KEY não poderão ser criados, se existirem valores de chave duplicados nos dados.
Um índice não clusterizado exclusivo pode conter colunas não chave incluídas. Para obter mais informações, consulte Criar índices com colunas incluídas.
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.
[Início]
Usando o SQL Server Management Studio
Para criar um índice exclusivo usando o Designer de Tabela
No Pesquisador de Objetos, expanda o banco de dados que contém a tabela na qual você deseja criar um índice exclusivo.
Expanda a pasta Tabelas.
Clique com o botão direito do mouse na tabela na qual você deseja criar um índice exclusivo e selecione Design.
No menu Designer de Tabela, selecione Í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 principal, em (Geral), selecione Tipo e escolha Índice na lista.
Selecione Colunas e clique no botão reticências (…).
Na caixa de diálogo Colunas de Índice, em Nome da Coluna, selecione as colunas que você deseja indexar. Você pode selecionar até 16 colunas. Para um desempenho ideal, selecione somente uma ou duas colunas por índice. Para cada coluna selecionada, indique se o índice organiza os valores dessa coluna em ordem crescente ou decrescente.
Quando todas as colunas para o índice estiverem selecionadas, clique em OK.
Na grade, em (Geral), selecione É Exclusivo e escolha Sim na lista.
Opcional: na grade principal, em Designer de Tabela, selecione Ignorar Chaves Duplicadas e escolha Sim na lista. Faça isso se você desejar ignorar as tentativas de adição de dados que criariam uma chave duplicada no índice exclusivo.
Clique em Fechar.
No menu Arquivo, clique em Salvar table_name.
Crie um índice exclusivo usando o Pesquisador de Objetos
No Pesquisador de Objetos, expanda o banco de dados que contém a tabela na qual você deseja criar um índice exclusivo.
Expanda a pasta Tabelas.
Expanda a tabela na qual você deseja criar um índice exclusivo.
Clique com o botão direito do mouse na pasta Índices, aponte para Novo Índice e selecione Índice Não Clusterizado….
Na caixa de diálogo Novo Índice, na página Geral, insira o nome do novo índice na caixa Nome do índice.
Marque a caixa de seleção Exclusivo.
Na guia Colunas de chave de índice, clique em Adicionar….
Na caixa de diálogo Selecionar Colunas de table_name, marque as caixas de seleção das colunas de tabela a serem adicionadas ao índice exclusivo.
Clique em OK.
Na caixa de diálogo Novo Índice, clique em OK.
[Início]
Usando Transact-SQL
Para criar um índice exclusivo em uma tabela
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 -- Find an existing index named AK_UnitMeasure_Name and delete it if found IF EXISTS (SELECT name from sys.indexes WHERE name = N'AK_UnitMeasure_Name') DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure; GO -- Create a unique index called AK_UnitMeasure_Name -- on the Production.UnitMeasure table using the Name column. CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure (Name); GO
Para obter mais informações, consulte CREATE INDEX (Transact-SQL).
[Início]