Я интересуюсь изучением, которое разработчики техники предпочитают использовать для осуществления уникальности в SQL Server: ОГРАНИЧЕНИЕ UNIQUE или УНИКАЛЬНЫЙ ИНДЕКС. Учитывая, что существует мало различия в физической реализации каждого, как Вы решаете, который является лучшим?
Есть ли причины кроме производительности для оценки лучшего решения?
Там преимущества управления базой данных одному или другому?
Эта статья MSDN, в которой сравниваются эти две, предназначена для SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa224827 (SQL.80) .aspx
Для большинства целей нет никакой разницы - ограничение реализовано как скрытый индекс. И хотя есть возможность отключить ограничение, на самом деле это не работает в SQL Server.
Это имеет значение только в том случае, если вы хотите настроить такие вещи, как FILLFACTOR и т. Д., В зависимости от того, каким образом вы хотите реализовать уникальное ограничение.
SQL Server 2008+ добавил INCLUDE
для обеспечения более эффективных покрывающих индексов. Отфильтрованные индексы = уникальное ограничение для подмножества строк / игнорирование множественных значений NULL и т. Д.
Они существенно не отличаются. Когда вы создаете уникальное ограничение, SQL Server автоматически создает для вас уникальный индекс.
С синтаксисом для создания индекса вы можете лучше контролировать определение уникального индекса для указания кластеризованных / некластеризованных, включенных столбцов, файловой группы, фильтрации индекса (SqlSvr2008) и т. Д.
В большинстве случаев ограничение предпочтительнее, потому что он выражает намерение уникальности: это ограничение. Индекс не передает этого намерения.
Что касается управляемости, то влияние минимально. Вы можете управлять индексом (перестроить, реорганизовать), как если бы он был создан независимо от ограничения. Единственная разница в том, что ограничение зависит от индекса, поэтому для удаления индекса необходимо также сбросить ограничение.