Как устроены некластеризованные индексы? База данных использует индекс для поиска записей в таблице Индекс представляет собой самостоятельную структуру, например B-дерево В нём хранятся ключи и ссылки на строки данных — RID или PK Физическая последовательность строк таблицы остаётся без изменений При выполнении запроса СУБД сначала находит ключ в индексе, а затем обращается к данным по указателю Подход ускоряет выборку по неключевым колонкам и запросы с несколькими условиями Недостаток — дополнительные затраты на хранение и обновление индекса Применяются для ускорения запросов без изменения структуры таблицы.
Как устроены некластеризованные индексы?
Как устроены некластеризованные индексы? База данных использует индекс для поиска записей в таблице Индекс представляет собой самостоятельную структуру, например B-дерево В нём хранятся ключи и ссылки на строки данных…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как устроены некластеризованные индексы?
- База данных использует индекс для поиска записей в таблице
- Индекс представляет собой самостоятельную структуру, например B-дерево
- В нём хранятся ключи и ссылки на строки данных — RID или PK
- Физическая последовательность строк таблицы остаётся без изменений
- При выполнении запроса СУБД сначала находит ключ в индексе, а затем обращается к данным по указателю
- Подход ускоряет выборку по неключевым колонкам и запросы с несколькими условиями
- Недостаток — дополнительные затраты на хранение и обновление индекса Применяются для ускорения запросов без изменения структуры таблицы.
Подробный ответ
Основной ответ
Некластеризованный индекс — это отдельная структура данных, в которой находятся копии индексируемых столбцов и указатели на соответствующие строки основной таблицы. В отличие от кластеризованного индекса, он не влияет на физический порядок размещения данных. По сути, такой индекс напоминает самостоятельную таблицу с ключами и ссылками на физические либо логические адреса строк в основном хранилище.
При выполнении запроса через некластеризованный индекс СУБД сначала находит нужное значение среди индексных ключей, после чего переходит по соответствующей ссылке и считывает строку из таблицы. Поэтому индекс ускоряет обнаружение данных, но не задаёт порядок их хранения на диске.
Ключевые моменты
- Структура: чаще всего некластеризованные индексы строятся на основе B-дерева (B-tree). Внутренние узлы используются для навигации по ключам, а листовые содержат сами значения ключей и указатели на строки данных.
- Дополнительное хранилище: для ключей и ссылок требуется отдельное дисковое пространство. Благодаря этому ускоряется чтение, однако вставка, обновление и удаление могут выполняться медленнее, поскольку индекс необходимо синхронно поддерживать в актуальном состоянии.
- Использование: такие индексы создают для ускорения поиска по неключевым столбцам и быстрой фильтрации, когда физический порядок строк должен оставаться доступным для других оптимизаций. В PostgreSQL 14+ и SQL Server 2019 стандартным вариантом считается именно некластеризованный индекс.
Практический контекст
В прикладных системах некластеризованные индексы часто добавляют для колонок, используемых в условиях WHERE и JOIN. Это помогает сократить latency запросов до 10–20 мс по сравнению с полным сканированием таблицы. Например, индекс можно создать для колонки email в таблице пользователей. При этом индексируемые поля следует выбирать осторожно, чтобы не снизить производительность операций записи.