Чем отличаются кластерные и некластерные индексы в базе данных PostgreSQL?
Ответ от нейросети
sobes.tech AI
В PostgreSQL кластерный индекс (clustered index) — это индекс, который определяет физический порядок строк в таблице. Некластерный индекс (non-clustered index) — это отдельная структура данных, которая содержит ссылки на строки таблицы, но не влияет на их физический порядок.
Основные отличия:
-
Кластерный индекс: таблица физически упорядочена в соответствии с индексом. В PostgreSQL это достигается командой
CLUSTER, которая перестраивает таблицу по выбранному индексу. После этого данные хранятся на диске в порядке индекса, что ускоряет последовательное чтение по этому ключу. -
Некластерный индекс: индекс хранится отдельно, а данные таблицы остаются в исходном порядке. При поиске по такому индексу сначала ищется позиция в индексе, затем происходит обращение к данным.
В PostgreSQL можно иметь только один кластерный индекс на таблицу, так как физический порядок может быть только один. Некластерных индексов может быть много.
Пример:
-- Создаем индекс
CREATE INDEX idx_name ON table_name(column);
-- Кластеризуем таблицу по этому индексу
CLUSTER table_name USING idx_name;
После этого данные будут физически упорядочены по column.