- 02/17/2017
- 5 minutos para ler
- ul>
- M
- M
- v
- c
- s
-
+1
/li> /li>
P>Aplica a: SQL Server (todas as versões suportadas) Azure SQL Database
Este tópico descreve como criar um índice único numa tabela no SQL Server utilizando o SQL Server Management Studio ou Transact-SQL. Um índice único garante que a chave de índice não contém valores duplicados e, portanto, cada linha na tabela é de alguma forma única. Não existem diferenças significativas entre a criação de uma restrição ÚNICO e a criação de um índice único que seja independente de uma restrição. A validação de dados ocorre da mesma forma, e o optimizador de consulta não diferencia entre um índice único criado por uma restrição ou criado manualmente. No entanto, a criação de uma restrição UNIQUE na coluna torna claro o objectivo do índice. Para mais informações sobre restrições UNIQUE, consulte Restrições únicas e Restrições de verificação.
Ao criar um índice único, pode definir uma opção para ignorar chaves duplicadas. Se esta opção for definida para Sim e tentar criar chaves duplicadas adicionando dados que afectam várias linhas (com a declaração INSERT), a linha que contém uma duplicata não é adicionada. Se estiver definida para Não, toda a operação de inserção falha e todos os dados são retrocedidos.
Nota
Não se pode criar um índice único numa única coluna se essa coluna contiver NULL em mais do que uma linha. Da mesma forma, não se pode criar um índice único em várias colunas se a combinação de colunas contiver NULL em mais do que uma linha. Estes são tratados como valores duplicados para efeitos de indexação.
Neste Tópico
-
Antes de começar:
Benefícios de um Índice Único
Aplicações Típicas
Limitações e Restrições
Segurança
Para criar um índice único sobre uma tabela, utilizando:
SQL Server Management Studio
Transact-SQL
Antes de começar
Benefícios de um índice único
- p>p>Índices únicos de colunas múltiplas garantem que cada combinação de valores na chave de índice é única. Por exemplo, se um índice único for criado numa combinação de colunas LastName, FirstName, e MiddleName, nenhuma das duas linhas da tabela poderia ter a mesma combinação de valores para estas colunas.
-
P>Dispositivo único em cada coluna, pode criar tanto um índice agrupado único como múltiplos índices únicos não agrupados na mesma tabela.
- p>Índices únicos garantem a integridade dos dados das colunas definidas.
- p>Índices únicos fornecem informações adicionais úteis ao optimizador de consultas que pode produzir planos de execução mais eficientes.
Implementações típicas
Índices únicos são implementados das seguintes formas:
-
PRIMARY KEY ou UNIQUE constraint
Quando se cria uma restrição PRIMARY KEY, um índice agrupado único na coluna ou colunas é automaticamente criado se não existir já um índice agrupado na tabela e não se especificar um índice único não agrupado. A coluna chave primária não pode permitir valores NULL.
Quando se cria uma restrição UNIQUE, é criado um índice não agrupado único para impor uma restrição UNIQUE por defeito. Pode especificar um índice agrupado único se ainda não existir um índice agrupado na tabela.
Para mais informações, consulte Restrições únicas e Restrições de verificação e Restrições de chave primária e estrangeira.
-
Index independente de uma restrição
Índices múltiplos únicos não agrupados podem ser definidos numa tabela.
Para mais informações, ver CREATE INDEX (Transact-SQL).
-
Visão indexada
Para criar uma visão indexada, um índice agrupado único é definido em uma ou mais colunas de visualização. A vista é executada e o conjunto de resultados é armazenado no nível da folha do índice, da mesma forma que os dados da tabela são armazenados num índice agrupado. Para mais informações, ver Criar vistas indexadas.
Limitações e restrições
- p> Um índice único, restrição ÚNICO, ou restrição PRIMÁRIA-CHAVE não pode ser criada se existirem valores chave duplicados nos dados.
-
Um índice único não agrupado pode conter colunas não-chave incluídas. Para mais informações, ver Criar índices com colunas incluídas.
Segurança
Permissões
Requer permissão ALTER na tabela ou na vista. O utilizador deve ser um membro da função fixa do servidor sysadmin ou das funções fixas da base de dados db_ddladmin e db_owner.
Usando o SQL Server Management Studio
Para criar um índice único usando o Table Designer
-
No Object Explorer, expandir a base de dados que contém a tabela sobre a qual se pretende criar um índice único.
- p>Expandir a pasta Tabelas.
- p>p>clique direito na tabela sobre a qual pretende criar um índice único e seleccione Design.
- p> No menu Table Designer, seleccione Indexes/Keys.
- p> Na caixa de diálogo Indexes/Keys, clique em Add.
- p> Na grelha principal, em (Geral), seleccione Type e depois escolha Index da lista.
- p>Select Columns, e depois clique na elipse (…).
-
Na caixa de diálogo Colunas de Indexação, em Column Name, seleccione as colunas que pretende indexar. Pode seleccionar até 16 colunas. Para um desempenho óptimo, seleccione apenas uma ou duas colunas por índice. Para cada coluna seleccionada, indique se o índice organiza os valores desta coluna em ordem ascendente ou descendente.
-
Quando todas as colunas para o índice forem seleccionadas, clique em OK.
- p> Na grelha, em (Geral), seleccione Is Unique e depois escolha Yes da lista.
- p>Opcional: Na grelha principal, em Table Designer, seleccione Ignore Duplicate Keys e depois escolha Yes da lista. Faça isto se quiser ignorar as tentativas de adicionar dados que criariam uma chave duplicada no índice único.
- p>Click Close.
- li>p> no menu File, clique em Savetable_name.
li>>p>Seleccionar o novo índice na caixa de texto Selected Primary/Unique Key ou Index.
Criar um índice único usando o Object Explorer
- p> No Object Explorer, expandir a base de dados que contém a tabela sobre a qual se pretende criar um índice único.
- p>Expandir a pasta Tabelas.
- p>Expandir a tabela sobre a qual pretende criar um índice único.
- p>p>P>Clique com o botão direito do rato na pasta Índices, aponte para Novo Índice, e seleccione Índice Não-Clusto….
- p>Na caixa de diálogo Novo Índice, na página Geral, introduza o nome do novo índice na caixa Nome do Índice.
- p>Selecione a caixa de seleção Unique.
- p>> abaixo das colunas-chave do Índice, clique em Add….
- p>Na caixa de diálogo Seleccionar Colunas da tabela_nome, seleccione a caixa de verificação ou as caixas de verificação da coluna ou colunas da tabela a serem adicionadas ao índice único.
li>>p>clique OK.>li>>p>> na caixa de diálogo Novo Índice, clique OK.
Usando Transact-SQL
Para criar um índice único sobre uma tabela
- p>No Object Explorer, ligar a uma instância do Motor de Base de Dados.
- p> Na barra Padrão, clicar em New Query.
-
Copiar e colar o seguinte exemplo na janela de consulta e clicar em Execute.
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 mais informações, ver CREATE INDEX (Transact-SQL).