Этот вопрос проверяет понимание различий между физическим порядком данных и отдельной структурой индекса.
Кластеризованный индекс хранит строки таблицы в порядке ключа — это сама таблица, упорядоченная по первичному ключу. Некластеризованный — отдельная структура (B-tree), которая хранит ключи и указатели на строки. Кластеризованный выгоден, если часто читают диапазоны по ключу, но таблица может упорядочиваться только одним способом. Некластеризованные подходят для дополнительных полей и точечного поиска.
Кластеризованный индекс:
Физическая сортировка данных в таблице по ключу.
Быстрый последовательный считывание диапазонов.
Можно иметь только один такой индекс на таблицу.
Некластеризованный индекс:
Отдельная B-tree структура: ключ → RID (row identifier).
Поддерживает несколько индексов на разные столбцы.
Сначала ищет в индексе, затем по RID добирается до строки.
Когда применять:
Clustered: для таблиц с явным порядком (даты, ID) и большими диапазонными запросами.
Nonclustered: для точечных запросов по альтернативным полям, JOIN-ключам.
Пример:
CREATE CLUSTERED INDEX idx_orders_date ON orders(order_date);
CREATE INDEX idx_orders_customer ON orders(customer_id);Вывод:
Балансируйте: один кластеризованный для частых диапазонов, несколько некластеризованных для фильтров.