2008-10-21 4 views
13

При создании индекса по столбцу, который собирается быть UNIQUE (но не первичный ключ таблицы), сервер пусть SQL для меня выбрать несколько вариантов:В чем разница между созданием индекса UNIQUE как «индекса» или «ограничения» в SQL Server?

1) я могу выбрать для того, чтобы быть Constraint или Индекса.
Я предполагаю, что это означает, что если я установлю его как ограничение, он не будет использовать его при запросе, только при записи. Тем не менее, единственный эффективный способ, с помощью которого SQL Server может обеспечить такое ограничение, заключается в создании индекса. Какая польза для этого варианта?

2) Кроме того, если я устанавливаю его как «индекс», он позволяет мне указать, что он должен игнорировать дубликаты ключей. Это самое загадочное для меня ...
Я снова думаю, что это означает противоположность ограничения. Вероятно, это означает «использовать его при запросе, но даже не проверяйте при записи».
Но почему я должен был установить его как УНИКАЛЬНЫЙ?
Я предполагаю, что есть некоторые оптимизации, которые может выполнять SQL Server, но я хотел бы лучше понять это.

Кто-нибудь знает, что именно SQL Server делает с этими параметрами?
Каков предел для установки индекса как уникального, но игнорировать дубликаты ключей?

Примечание: Это для SQL Server 2000


EDIT: Согласно тому, что вы сказали, но ... Если я создаю Constraint, она будет использоваться для ускорения запросов, которые фильтруют с помощью поля в ограничении?

Спасибо!

+0

Я всегда задавался вопросом об этой разнице. Разница между уникальным индексом и уникальным ограничением. – leppie 2008-10-21 14:34:15

ответ

7

A UNIQUE Ограничение является частью стандарта ISO/ANSI SQL, тогда как индексы - это не потому, что стандарт является агностиком реализации. SQL Server, как и большинство СУБД SQL, будет использовать индекс для реализации ограничения UNIQUE.

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

5

SQL Server построит индекс для реализации ограничений UNIQUE. Вы можете увидеть ссылку на уникальный индекс, который используется для обеспечения уникальных ограничений в представлении sys.key_constraints (в 2005 году — извините, я не знаю эквивалент 2000). Но обе версии будут использовать индекс при запросе.

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

Оба варианта позволит вам «игнорировать дубликаты ключей» на существующих данных, но и вызовет ошибку при попытке вставить новый значения, которое дублирует существующий.

2

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

+0

Существует некоторое преимущество, хотя для обозначения чего-то как уникального ключа, а не уникального индекса, в том, что инструменты базы данных, такие как ORM, заметят уникальные ключи и могут воспользоваться ими. Уникальные ключи почти всегда минимальны и, таким образом, «кандидатские ключи», в то время как уникальные индексы могут так сильно индексировать индексы, что они включают все столбцы уникального ключа (что делает их «супер-ключами»), а также путем маркировки индекс как уникальный SQL Server может воспользоваться этим фактом в оптимизации запросов. – 2011-10-20 17:48:07

2

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

Here - отличная статья и видео, объясняющее разницу между обоими подходами.

 Смежные вопросы

  • Нет связанных вопросов^_^