Ответ
Некластерный индекс — это отдельная от данных структура, которая хранит отсортированные значения ключевых столбцов вместе с указателем на местоположение соответствующей строки в таблице. Он не изменяет физический порядок данных.
Ключевые особенности:
- Множество индексов: На одной таблице можно создать множество некластерных индексов.
- Структура B-дерева: Листовые узлы содержат ключ индекса и указатель (например, значение кластерного ключа или идентификатор строки (RID) в куче).
- Дополнительный шаг: Для получения данных, не входящих в индекс, требуется дополнительное обращение к основной таблице (кластерному индексу или куче).
Пример создания:
-- Создание некластерного индекса по столбцу last_name
CREATE INDEX idx_lastname ON employees(last_name);
Как работает запрос:
SELECT * FROM employees WHERE last_name = 'Ivanov';
- СУБД находит запись
'Ivanov'в индексеidx_lastname. - Из листового узла индекса извлекается указатель (например,
idсотрудника). - По этому указателю выполняется поиск в кластерном индексе (или куче) для получения всех данных строки
employees.
Компромиссы:
- Плюсы: Ускоряет операции
SELECT,WHERE,ORDER BY,JOIN. - Минусы: Занимает дополнительное дисковое пространство; замедляет
INSERT,UPDATE,DELETE, так как требует обновления самих индексов.