-
Notifications
You must be signed in to change notification settings - Fork 2
30. Индексы Transact SQL
Индекс – это объект базы данных, обеспечивающий дополнительные способы быстрого поиска и извлечения данных.
Индекс может создаваться на одном или нескольких столбцах. Это означает, что индексы бывают простыми и составными. Если в таблице нет индекса, то поиск нужных строк выполняется простым сканированием по всей таблице. При наличии индекса время поиска нужных строк можно существенно уменьшить. К недостаткам индексов следует отнести:
- дополнительное место на диске и в оперативной памяти,
- замедляются операции вставки, обновления и удаления записей.
CREATE INDEX CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX имя- индекса
ON имя-таблицы-или-представления ( список-столбцов ) [ INCLUDE (список-столбцов) ]
[WITH список-опций]
[ ON файловая-группа ]
В кластерном индексе таблица представляет собой часть индекса, или индекс представляет собой часть таблицы в зависимости от вашей точки зрения. Листовой узел кластерного индекса – это страница таблицы с данными. Поскольку сами данные таблицы являются частью индекса, для таблицы может быть создан только один кластерный индекс. В SQL Server кластерный индекс является уникальным индексом по определению.
В листьях некластерного индекса на основе кучи хранятся указатели на строки данных. Указатель строится на основе идентификатора файла (ID
), номера страницы и номера строки на странице. Весь указатель целиком называется идентификатором строки (RID
).
В листьях некластерного индекса, основанного на кластерных таблицах, хранятся указатели на корневые узлы кластерных индексов. Поиск в таком индексе состоит из двух этапов:
- поиск в некластерном индексе
- поиск в кластерном индексе.
Такой тип индексов часто называют «связанными индексами». Связанные индексы создаются при добавлении одного из следующих двух типов ограничений:
- ограничения первичного ключа (
PRIMARY KEY
); - ограничения уникальности (
UNIQUE
).