Индексы используются для быстрого поиска нужных записей в таблицах базы данных. Существует два типа индексов: кластерные и некластерные. Структура обоих типов индексов - B-дерево (Balanced tree, сбалансированное дерево). На листовом уровне B-дерева кластерный индекс содержит записи таблицы, а некластерный - указатели на записи.
У таблицы может быть только один кластерный индекс, т.к. ключ кластерного индекса физически упорядочивает таблицу. Этот тип индексов особенно эффективен при выполнении запросов, поскольку записи хранятся на листовом уровне B-дерева. Порядком сортировки и местом хранения кластерный индекс напоминает словарь с его алфавитным порядком сортировки слов и наличием определений после каждого слова.
Если кластерный индекс у таблицы всегда один, то некластерных индексов для таблицы может быть создано несколько. Некластерный индекс напоминает предметный указатель, где у каждого элемента проставлена соответствующая ему страница.
Помимо типа (кластерный или некластерный), индекс имеет ряд других свойств:
- уникальный - в нем не допускается дублирования ключей;
- составной - ключ такого индекса состоит из нескольких полей.
Если результат запроса можно получить из индекса, без обращения к лежащей в его основе таблицы, то такой запрос считается покрытым, а индекс - покрывающим. При создании индекс упорядочивается по возрастанию. Это касается как кластерных, так и некластерных индексов. Кластерный индекс определяет порядок сортировки таблицы.
Оператор CREATE INDEX используется для создания индекса. Синтаксис оператора CREATE INDEX выглядит так:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX {индекс}
ON {таблица} (список полей)
Оператор DROP INDEX используется для удаления индекса. Синтаксис оператора DROP INDEX выглядит так:
DROP INDEX {индекс}