Является ли уникальный ключ сервера Sql также индексом? - PullRequest
51 голосов
/ 14 декабря 2008

У меня есть столбец в таблице (например, UserName), который я хочу убедиться, что он уникален. Поэтому я создаю уникальный ключ для этого столбца и называю его IX_Users_UserName.

Теперь, если я буду много искать пользователей по их имени, я хочу убедиться, что для этого поля есть индекс.

Нужно ли создавать отдельный индекс или уникальный ключ также считается индексом, так же как первичный ключ является кластеризованным уникальным ключом?

Ответы [ 3 ]

39 голосов
/ 14 декабря 2008

Уникальный ключ: уникальный ключ обеспечивает Уникальность колонны, на которой они определены. Уникальный ключ создает некластеризованный индекс по столбцу. Уникальный ключ допускает только одно значение NULL.

Изменить таблицу, чтобы добавить уникальное ограничение в столбец:

ALTER TABLE Авторы ДОБАВИТЬ ОГРАНИЧЕНИЯ IX_Authors_Name UNIQUE (Имя) GO

Источник

Дополнительная информация от MSDN .

FWIW - если ваше ограничение не создает индекс, я бы не стал называть его IX_, поскольку обычно предполагается, что он связан с единицей (IX = индекс).

20 голосов
/ 17 декабря 2008

В сущности, в SQL Server уникальное ограничение действительно реализуется посредством уникального индекса.

Различия между УНИКАЛЬНЫМ ограничением и УНИКАЛЬНЫМ ИНДЕКСОМ на самом деле довольно тонкие. Если вы создаете UNIQUE INDEX, вы можете ссылаться на него в ограничениях внешнего ключа из другой таблицы (не работает, если вы создаете ограничение UNIQUE ....).

Так в чем же разница? Что ж, уникальное ограничение действительно более логично для таблицы - вы хотите выразить намерение, чтобы содержимое данного столбца (или группы столбцов) было уникальным.

Уникальный индекс (как и большинство индексов) - это скорее деталь "закулисной" реализации.

С моей точки зрения, если у вас действительно нет проблем с этим, я бы всегда использовал УНИКАЛЬНЫЙ ИНДЕКС - преимущество того, чтобы быть частью ограничения ссылочной целостности, вполне допустимо и может быть очень полезно в некоторых случаях. Функционально на практике нет никакой разницы между использованием уникальных ограничений против уникального индекса.

1 голос
/ 14 декабря 2008

Уникальный ключ - это индекс, который, как я подозреваю, есть почти у каждого продукта базы данных. Должно быть, в противном случае базе данных будет трудно обеспечить ее соблюдение: когда вы вставляете значение, база данных должна ответить: «Это значение уже существует? Разумный способ сделать это - обратиться к индексу.

У меня нет SQL Server для тестирования, но я был бы шокирован, если бы его не было.

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