Quais são as diferenças entre restrições únicas e índices únicos?
- Os conceitos de uma restrição única e um índice único são diferentes.
Uma restrição única especifica que os valores em uma coluna ou um grupo de colunas são todos exclusivos. Se DISTRIBUTE BY REPLICATION não for especificado, a tabela de colunas que contém apenas valores exclusivos deve conter colunas de distribuição.
Um índice único é usado para garantir a exclusividade de um valor de campo ou a combinação de valores de vários campos. CREATE UNIQUE INDEX cria um índice único.
- As funções de uma restrição única e de um índice único são diferentes.
Restrições são usadas para garantir a integridade dos dados e índices são usados para facilitar a consulta.
- Os usos de uma restrição única e um índice único são diferentes.
- Ambas as restrições únicas e índices únicos podem ser usados para garantir a exclusividade dos valores da coluna que podem ser NULL.
- Quando uma restrição única é criada, um índice único com o mesmo nome é criado automaticamente. O índice não pode ser excluído separadamente. Quando a restrição é excluída, o índice é automaticamente excluído. Uma restrição única usa um índice único para garantir a exclusividade dos dados. As tabelas de armazenamento de linha do GaussDB(DWS) suportam restrições únicas, mas as tabelas de armazenamento de coluna não.
- Um índice único criado é independente e pode ser excluído separadamente. Atualmente no GaussDB(DWS), índices únicos só podem ser criados usando B-Tree.
- Se você quiser ter uma restrição única e um índice único em uma coluna, e eles podem ser excluídos separadamente, você pode criar um índice único e, em seguida, uma restrição única com o mesmo nome.
- Se um campo em uma tabela deve ser usado como uma chave estrangeira de outra tabela, o campo deve ter uma restrição única (ou é uma chave primária). Se o campo tiver apenas um índice único, um erro será relatado.
Exemplo: crie um índice composto para duas colunas, que não precisa ser um índice único.
1 2 |
CREATE TABLE t (n1 number,n2 number); CREATE INDEX t_idx ON t(n1,n2); |
Você pode usar o índice t_idx criado no exemplo anterior para criar uma restrição única t_uk, que é exclusiva apenas na coluna n1. Uma restrição única é mais rigorosa do que um índice único.
1
|
ALTER TABLE t ADD CONSTRAINT t_uk UNIQUE (n1) USING INDEX t_idx; |