Уникальный ключ или индекс с «Уникальным»

#sql #sql-server-2008-r2 #ssms

#sql #sql-server-2008-r2 #ssms

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

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

Ответ №2:

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

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

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

Ответ №3:

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

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

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