Вызывает ли создание уникального столбца индекс? - PullRequest
4 голосов
/ 26 мая 2009

В SQL Server 2005+ (я использую оба), автоматически ли добавление ограничения UNIQUE к столбцу создает индекс, или мне все равно нужно CREATE INDEX?

Ответы [ 3 ]

8 голосов
/ 26 мая 2009

См. Статья MSDN :

Database Engine автоматически создает уникальный индекс для обеспечения соблюдения требование уникальности УНИКАЛЬНОГО ограничение.

Если вы создадите индекс, вы получите два индекса, как показано в этом примере:

create table TestTable (id int)
alter table TestTable add constraint unique_id unique (id)
create unique index ix_TestTable_id on TestTable (id)

select * from sys.indexes where [object_id] = object_id('TestTable')

Это отобразит два уникальных индекса в TestTable; и HEAP, представляющая саму таблицу.

2 голосов
/ 26 мая 2009

Да, это так.

На самом деле, вы даже можете создать CLUSTERED UNIQUE CONSTRAINT:

ALTER TABLE mytable ADD CONSTRAINT UX_mytable_col1 UNIQUE CLUSTERED (col1)

, в результате чего таблица будет кластеризована на col1.

Почти все базы данных создают индекс для UNIQUE CONSTRAINT, в противном случае его было бы очень сложно поддерживать.

Oracle даже не различает UNIQUE CONSTRAINT и UNIQUE INDEX: одна команда является синонимом другой.

Единственное отличие в Oracle состоит в том, что UNIQUE INDEX должен иметь имя, предоставленное пользователем, тогда как UNIQUE CONSTRAINT может быть создано с помощью сгенерированного системой имени:

ALTER TABLE mytable MODIFY col1 UNIQUE

Это создаст индекс с именем SYS_CXXXXXX.

1 голос
/ 26 мая 2009

Индекс создается при добавлении уникального ограничения:

Ссылка - см. Второй абзац.

Когда к УНИКАЛЬНОМУ ограничению добавляется существующий столбец или столбцы в таблица, по умолчанию, компонент Database Engine исследует существующие данные в столбцы, чтобы убедиться, что все значения уникальный. Если УНИКАЛЬНОЕ ограничение добавлен в столбец, который дублируется значения, компонент Database Engine возвращает ошибка и не добавляет ограничение.

Database Engine автоматически создает уникальный индекс для обеспечения соблюдения требование уникальности УНИКАЛЬНОГО ограничение. Поэтому, если попытка чтобы вставить дубликат строки, Database Engine возвращает ошибку сообщение о том, что УНИКАЛЬНО ограничение было нарушено и делает не добавлять строки в таблицу. Если только Кластерный индекс явно указан, уникальный, некластеризованный Индекс создается по умолчанию для обеспечения соблюдения УНИКАЛЬНОЕ ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...