ответ

23

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

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

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

Unique Index

Создает уникальный индекс для таблицы или зрения. Единственным индексом является индекс, в котором нет двух строк, имеющих одинаковое значение ключа ключа . Кластерный индекс на представлении должен быть уникальным

Unique key (Constraint)

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

19

MSDN article comparing the two is what you're after. Терминология такова, что «ограничение» - это ANSI, но в SQL Server вы не можете отключить уникальное ограничение ...

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

  • подстройки FILLFACTOR
  • ВКЛЮЧИТЬ обеспечивает более эффективные показатели покрытия (композитные ограничения)
  • отфильтрованный индексом является как ограничение по подмножеству строк/игнорировать множество нулей и т. д.
+1

"ограничение реализуется как индекс под одеялом" - абсолютно верно, и это было бы невозможно эффективно применять без индекса в любом случае. – DaveBoltman

2

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

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

-1

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

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

0

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

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

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

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

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

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

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


Update:
Мой связанный с этим вопрос:
[1]
UNIQUE argument for INDEX creation - what's for?