#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 = ‘?’, и индекс в этом столбце создаст отдельное хранилище, упорядочивающее эту таблицу, поэтому поиск записи по имени выполняется быстро. Обычно первичные ключи индексируются автоматически.
Конечно, вышесказанное является слишком общим, и вам следует рассмотреть возможность профилирования запросов до и после добавления индекса, чтобы убедиться, что он используется и ускоряет работу. Есть несколько тонкостей в индексах, которые делают приложение специфичным. Для их создания и поддержки требуется дополнительное хранилище и время, поэтому вы всегда должны быть благоразумны при их добавлении.
Надеюсь, это поможет.