Ответ
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) используются для конкретных типов данных и операторов.