Какие типы индексов поддерживает PostgreSQL?

«Какие типы индексов поддерживает PostgreSQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PostgreSQL поддерживает несколько специализированных типов индексов, каждый оптимизирован для определенных сценариев:

Тип индекса Назначение Пример использования
B-tree Стандартный индекс. Подходит для сравнений (=, <, >), сортировки и диапазонов. CREATE INDEX idx_name ON users (last_name);
Hash Только для операций точного равенства (=). Обычно медленнее B-tree, не поддерживает сортировку. CREATE INDEX idx_hash ON table USING HASH (column);
GIN (Generalized Inverted Index) Для сложных, составных значений: массивы, JSON/JSONB, полнотекстовый поиск (tsvector). CREATE INDEX idx_gin ON docs USING GIN (jsonb_data);
GiST (Generalized Search Tree) Для данных с перекрывающимися диапазонами: геоданные, полнотекстовый поиск, IP-адреса. CREATE INDEX idx_gist ON locations USING GiST (geom);
SP-GiST (Space-Partitioned GiST) Для нерегулярных, но разбиваемых на непересекающиеся области структур (деревья, trie). CREATE INDEX idx_spgist ON ip_table USING SPGiST (ip_range);
BRIN (Block Range INdexes) Для очень больших таблиц, где данные физически упорядочены. Минимальный размер, быстрое создание. CREATE INDEX idx_brin ON sensor_data USING BRIN (timestamp);

Выбор типа: B-tree подходит для большинства случаев. Специализированные индексы (GIN, GiST) используются для конкретных типов данных и операторов.