Уникальный индекс
Уникальные индексы(Unique Indexes) гарантируют уникальность значений в индексируемой колонке. Сервер не разрешит вставить новое или изменить существующее значение таким образом, что в результате этой операции в колонке будет существовать два одинаковых значения.
Уникальный индекс является своеобразной надстройкой и может быть реализован как для кластерного, так и для некластерного индексов. В одной таблице могут существовать один уникальный кластерный индекс и множество уникальных некластерных индексов.
Используйте кластерные индексы тогда, когда это действительно необходимо. Для обеспечения целостности данных в колонке можно определить ограничение целостности UNIQUE или PRIMARY KEY, а не прибегать к использованию уникальных индексов. Использование уникальных индексов только для обеспечения целостности данных является неоправданной тратой пространства в базе данных.
Формат команды CREATE INDEX на Transact SQL имеет вид:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name ON table (column [...n])
UNIQUE – при указании этого ключевого слова будет создан уникальный индекс. При создании такого индекса сервер выполняет предварительную проверку колонки на уникальность значений. Если в колонке есть хотя бы два одинаковых значения, индекс не создается и сервер выдает сообщение об ошибке. В индексируемой колонке также желательно запретить хранение значений NULL, чтобы избежать проблем, связанных с уникальностью значений. После того как для колонки создан уникальный индекс, сервер не разрешает выполнение команд INSERT и UPDATE, которые приведут к появлению дублирующихся значений.
CLUSTERED – создаваемый индекс будет кластерным, то есть физически данные будут располагаться в порядке, определяемом этим индексом. Кластерным может быть только один индекс в таблице.
NONCLUSTERED – создаваемый индекс будет некластерным. В таблице можно определить до 249 некластерных индексов.
Index_name – имя индекса, по которому он будет распознаваться командами Transact-SQL. Имя индекса должно быть уникальным в пределах таблицы.
table (column [...n]) – имя таблицы, в которой содержатся одна или несколько индексируемых колонок. В скобках указываются имена колонок, на основе которых будет построен индекс. Не допускается построение индекса на основе колонок с типом данных text, ntext, image или bit. Если указывается несколько колонок, то создаваемый индекс будет смешанным(composite index). В один смешанный индекс можно включить до 16 колонок.
Для удаления индекса используется команда DROP INDEX, имеющая следующий синтаксис:
DROP INDEX 'table.index' [...n]
Аргумент 'table.index' определяет удаляемый индекс в таблице. За одну операцию удаления можно удалить несколько индексов в любой таблице базы данных для этого их достаточно перечислить их через запятую.