Уникальный индекс или уникальный ключ? - PullRequest
37 голосов
/ 25 сентября 2010

В чем разница между уникальным индексом и уникальным ключом?

Ответы [ 5 ]

29 голосов
/ 25 сентября 2010

Уникальное произведение не в том, в чем разница.Индекс и ключ - это не одно и то же, и они не сравнимы.

Ключ - это столбец данных или несколько столбцов, которые вынуждены быть уникальными с ограничением, либо первичным ключом, либо явно определенным уникальным ограничением.,Принимая во внимание, что индекс - это структура для хранения местоположения данных для более быстрого поиска.

Из документов:

Уникальный индекс

Создает уникальныйиндекс по таблице или представлению.Уникальный индекс - это индекс, в котором две строки не могут иметь одинаковое значение ключа индекса.Кластерный индекс в представлении должен быть уникальным

Уникальный ключ (ограничение)

Вы можете использовать ограничения UNIQUE, чтобы убедиться, что нет повторяющихся значенийвводятся в определенные столбцы, которые не участвуют в первичном ключе.Хотя и ограничение UNIQUE, и ограничение PRIMARY KEY обеспечивают уникальность, используйте ограничение UNIQUE вместо ограничения PRIMARY KEY, если вы хотите применить уникальность столбца или комбинации столбцов, которые не являются первичными ключами.

20 голосов
/ 25 сентября 2010

Эта статья MSDN, сравнивающая эти два, - то, что вам нужно .Терминология такова, что «ограничение» - это ANSI, но в SQL Server нельзя отключить уникальное ограничение ...

Для большинства целей нет никакой разницы - ограничение реализовано в виде индекса под прикрытием,В статье MSDN это подтверждается - разница заключается в метаданных, например:

  • настройка FILLFACTOR
  • INCLUDE обеспечивает более эффективные индексы покрытия (составное ограничение)
  • Отфильтрованный индекс похож на ограничение на подмножество строк / игнорирует несколько нулей и т. Д.
4 голосов
/ 25 сентября 2010

«Уникальный ключ» - тавтология.Ключ (AKA «Candidate Key») - это логическая функция базы данных - ограничение, обеспечивающее уникальность набора атрибутов в таблице.

Индекс - это функция физического уровня, предназначенная для оптимизации производительности в некоторыхпуть.Существует много типов индексов.

0 голосов
/ 26 сентября 2010

И ключ (или ключевое слово), и индекс являются идентификаторами строки таблицы.
Хотя индекс - это структура параллельной идентификации, содержащая указатель на идентифицированную строку, а ключи - члены поля in situ.

Ключ, как идентификатор, подразумевает уникальность (ограничение) и NOT NULL (ограничение).В NULL нет смысла как идентификатор (так как null не может ничего идентифицировать), а также неуникальное идентифицирующее значение.
Некластеризованный индекс может содержать реальные данные, не служащие в качестве идентификатора для реальных данных, и поэтому быть неуникальным [1]

К сожалению, ключ или индекс (идентификатор) вызывается ограничением (правилом или ограничением), за которым следовало большинство предыдущих ответов.

Ключи используются в контексте:

  • альтернативные альтернативные или альтернативные ключи-кандидаты, могут быть кратны
  • составной ключ (несколько полей объединены)
  • первичный ключ (суперключ), натуральный или суррогатный ключ, только один,действительно используется для ссылочной целостности
  • внешний ключ

Внешний ключ - это ключ в другой таблице (где он является первичным ключом), и даже не ключ, к которому они часто обращаются.Такое использование объясняется путаницей сокращения термина «ограничение внешнего ключа» до «внешнего ключа».

Ограничение первичного ключа действительно подразумевает ограничения NOT NULL и UNIQUE +, что указанный столбец (или объединенные столбцы) является идентификатором, а также, к сожалению, заменяется «первичным ключом» или «ограничением первичного ключа», в то время как они оба нельзя вызватьлибо только (первичный ключ), либо только (первичный) ключ.


Обновление:
Мой связанный вопрос:
[1]
УНИКАЛЬНЫЙ аргумент для создания INDEX - для чего?

0 голосов
/ 26 сентября 2010

Уникальный ключ: Это ограничение, накладывающее ограничение на базу данных. Это ограничение не допускает дублирования значений. Например, если вы хотите выбрать один столбец в качестве первичного ключа, он должен быть NOT NULL & UNIQUE.

Уникальный индекс: Это индекс, который повышает производительность при выполнении запросов к вашей базе данных. В уникальном индексе это также не позволяет дублировать значения в индексе. т.е. две строки не будут иметь одинаковое значение ключа индекса.

...