Индексы в PostgreSQL

Зачем это знать:

  • Тип индекса должен соответствовать типу запросов.

  • “Есть индекс” ≠ “он будет использован”.

Связанные темы:

Методы доступа к данным

Планировщик запросов и EXPLAIN


Основные типы индексов (концептуально)

  • B-Tree — дефолт: равенство, диапазоны, сортировки, prefix-условия.

  • GIN — часто для массивов/JSONB/full-text (много значений на строку).

  • GiST — гео/поиск по расстояниям и другие “нетривиальные” операторы.

  • BRIN — большие таблицы с коррелированным порядком (например, по времени), дешёвый по размеру.


Почему индекс может не примениться

  • Низкая селективность.

  • Условие “ломает” sargability (функция на колонке, несоответствие типов, не тот оператор).

  • Планировщик считает, что seq scan дешевле (по статистике).

  • Нужны данные из heap (и их много) ⇒ Index Scan деградирует.


Побочные эффекты индексов

  • Ускоряют чтение, но замедляют запись (INSERT/UPDATE/DELETE) — нужно поддерживать структуру индекса.

  • Могут раздуваться (bloat) и требовать обслуживания.

Последнее обновление