Sobes.tech
Назад к вопросам
Junior — Middle
64

Чем отличаются кластерные и некластерные индексы в базе данных PostgreSQL?

Компании, где спрашивали
AstonAston

Ответ от нейросети

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.