Ограничение на уникальность данных по сравнению с уникальным индексом

Я интересуюсь изучением, которое разработчики техники предпочитают использовать для осуществления уникальности в SQL Server: ОГРАНИЧЕНИЕ UNIQUE или УНИКАЛЬНЫЙ ИНДЕКС. Учитывая, что существует мало различия в физической реализации каждого, как Вы решаете, который является лучшим?

Есть ли причины кроме производительности для оценки лучшего решения?

Там преимущества управления базой данных одному или другому?

43
задан OMG Ponies 21 July 2010 в 15:36
поделиться

2 ответа

Эта статья MSDN, в которой сравниваются эти две, предназначена для SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa224827 (SQL.80) .aspx

​​Для большинства целей нет никакой разницы - ограничение реализовано как скрытый индекс. И хотя есть возможность отключить ограничение, на самом деле это не работает в SQL Server.

Это имеет значение только в том случае, если вы хотите настроить такие вещи, как FILLFACTOR и т. Д., В зависимости от того, каким образом вы хотите реализовать уникальное ограничение.

SQL Server 2008+ добавил INCLUDE для обеспечения более эффективных покрывающих индексов. Отфильтрованные индексы = уникальное ограничение для подмножества строк / игнорирование множественных значений NULL и т. Д.

31
ответ дан 26 November 2019 в 23:00
поделиться

Они существенно не отличаются. Когда вы создаете уникальное ограничение, SQL Server автоматически создает для вас уникальный индекс.

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

В большинстве случаев ограничение предпочтительнее, потому что он выражает намерение уникальности: это ограничение. Индекс не передает этого намерения.

Что касается управляемости, то влияние минимально. Вы можете управлять индексом (перестроить, реорганизовать), как если бы он был создан независимо от ограничения. Единственная разница в том, что ограничение зависит от индекса, поэтому для удаления индекса необходимо также сбросить ограничение.

30
ответ дан 26 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: