Уникальный ключ или индекс с «Уникальным» - PullRequest
2 голосов
/ 05 октября 2011

У меня довольно глупая проблема. Я упросту ситуацию: у меня есть таблица в SQL Server 2008 R2, где у меня есть поле 'ID' (int, PK) и поле Name (nvarchar (50)) и Description (text). Значения в поле «Имя» должны быть уникальными. При поиске в таблице будет использоваться поле «Имя», поэтому ключевым фактором здесь является производительность.

Я искал 2 часа в Интернете, чтобы полностью понять разницу между уникальным ключом, первичным ключом, уникальным индексом и т. Д., Но это не помогло мне решить мою проблему с тем, какой ключ / ограничение / индекс мне следует использовать.

Я изменяю таблицы в SQL Server Management Studio. Мой вопрос по изменению этого поля Name: я должен использовать «Type = Index» с «Is Unique = Yes» или «Type = Unique Key»?

Заранее спасибо!

С уважением, Аббас

Ответы [ 3 ]

6 голосов
/ 05 октября 2011

Уникальный ключ и первичный ключ являются логическими ограничениями. Они оба подкреплены уникальным индексом. Столбцы, которые участвуют в первичном ключе, не могут быть NULL -able.

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

В индексах на основе ограничений хранятся дополнительные метаданные, которые отсутствуют в обычных индексах (например, create_date в sys.objects). Создание уникального индекса, не основанного на ограничениях, может обеспечить большую гибкость, поскольку позволяет определять столбцы, включенные в определение индекса, например (я думаю, что могут быть и другие вещи).

2 голосов
/ 05 октября 2011

A unique key не может иметь то же значение, что и любая другая строка столбца в таблице.primary key - это поле (я) столбца, которое является unique key и not null, которое используется в качестве основного механизма поиска (то есть каждая таблица должна иметь primary key в качестве столбца или комбинации столбцов, которые представляютуникальная запись).

Я не особо много использовал индексы, но я полагаю, что это следует той же логике.

См. http://en.wikipedia.org/wiki/Unique_key для получения дополнительной информации.

1 голос
/ 05 октября 2011

Индекс - это набор, который СУБД использует для эффективной организации ваших табличных данных.Обычно вы хотите создать индекс для столбцов и групп столбцов, по которым вы часто выполняете поиск.Например, если у вас есть столбец «имя» и вы ищете свою таблицу, где имя = '?'и индекс для этого столбца создаст отдельное хранилище, которое упорядочит эту таблицу, поэтому поиск записи по имени будет быстрым.Обычно первичные ключи автоматически индексируются.

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

Надеюсь, это поможет.

...