Правила по созданию уникальных индексов
Уникальный индекс гарантирует, что ключ индекса не будет содержать одинаковых значений, а значит, каждая строка в таблице будет уникальна. Создание уникального индекса имеет смысл, только если данные сами по себе могут быть уникальными. Например, если нужно, чтобы значения столбца NationalIDNumber таблицы HumanResources.Employee были уникальны при первичном ключе EmployeeID, то необходимо создать ограничение UNIQUE для столбца NationalIDNumber
. Если пользователь попытается ввести в этот столбец одно и тоже значение для нескольких сотрудников, появится сообщение об ошибке, а дублирующие данные не будут сохранены.
В случае уникальных индексов по нескольким столбцам индекс гарантирует, что каждая комбинация значений в ключе индекса уникальна. Например, если уникальный индекс создан для комбинации столбцов LastName, FirstName и MiddleName, то никакие две строки в таблице не могут образовывать одну и ту же комбинацию этих значений.
Как кластеризованные, так и некластеризованные индексы могут быть уникальными. Учитывая, что данные в столбце уникальны, можно создать уникальный кластеризованный индекс и несколько уникальных некластеризованных индексов для одной и той же таблицы.
Уникальные индексы имеют следующие приимущества:
- Гарантируется целостность данных в определенных столбцах.
- Предоставляются дополнительные сведения, полезные оптимизатору запросов.
Создание ограничений PRIMARY KEY или UNIQUE автоматически создает уникальный индекс для заданных столбцов. Между созданием ограничения UNIQUE и созданием уникального индекса независимо от ограничения больших различий нет. Проверка данных производится одним и тем же способом, а оптимизатор запросов не делает разницы между уникальными индексами, созданными по ограничению и вручную. Однако на столбцы, для которых важна целостность данных, следует накладывать ограничение UNIQUE или PRIMARY KEY. Тогда цель создания индекса будет ясна.
Замечания
- Уникальный индекс и ограничения UNIQUE и PRIMARY KEY не могут быть созданы, если дублирующиеся значения уже существуют.
- Если данные уникальны и если нужно и далее требовать этой уникальности, создание уникального индекса вместо неуникального для тех же сочетаний столбцов предоставит дополнительные сведения оптимизатору запросов, который может создать более эффективные планы выполнения. В этом случае рекомендуется создание уникального индекса (предпочтительнее через ограничение UNIQUE).
- Уникальный некластеризованный индекс может содержать любые неключевые столбцы. Дополнительные сведения см. в разделе Индекс с включенными столбцами.
Параметры индексов
Существует несколько параметров индексов, которые можно задать при создании уникального индекса. Особого внимания требуют следующие параметры:
- IGNORE_DUP_KEY
- ONLINE
Дополнительные сведения см. в разделе Установка параметров индекса.
См. также
Основные понятия
Создание индексов (компонент Database Engine)
Общие рекомендации по проектированию индексов