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