Индексы в PostgreSQL
1. Зачем нужны индексы?
Ускоряют SELECT, JOIN, ORDER BY, GROUP BY.
Снижают нагрузку при выборках без полного сканирования таблицы.
2. Типы индексов
B-tree (по умолчанию): точный поиск (=), диапазоны (<, >), сортировки.
Hash: для точного сравнения, но используется редко.
GIN: массивы и полнотекстовый поиск.
GiST: геоданные (PostGIS), диапазоны (int4range, tsrange).
BRIN: очень большие таблицы, где данные «почти упорядочены» (по дате).
3. Практические советы
Оценивайте запросы через EXPLAIN ANALYZE или pg_stat_statements.
Не создавайте индекс «про запас»: каждый замедляет INSERT/UPDATE/DELETE.
Составные индексы: порядок колонок критичен.
Избегайте низкокардинальных колонок (boolean, ENUM) — индекс неэффективен, если фильтр возвращает большинство строк.
Актуализируйте статистику: запускайте ANALYZE после больших загрузок/удалений.
Удаляйте устаревшие индексы:
Используйте REINDEX для устранения фрагментации:
4. Подводные камни
Бесполезный индекс: если WHERE возвращает ≥90% строк (например, is_active = true при 99% активных).
Функциональные индексы: CREATE INDEX ON table ((LOWER(name))) сработает только при точном вызове WHERE LOWER(name) = 'ivan'.
Блокировки: для создания без блокировки пишите:
Но этот процесс дольше и требует больше места.
Индексы на внешних ключах: без них при удалении/обновлении родительской записи будут долгие сканы.
Итог:
Индексы — мощный инструмент, если их грамотно использовать. Анализируйте планы запросов, не создавайте лишних, следите за статистикой и удаляйте устаревшие.
1. Зачем нужны индексы?


2. Типы индексов

SQL:
CREATE INDEX idx_users_email ON users(email);


SQL:
CREATE INDEX idx_docs_content
ON documents USING GIN(to_tsvector('russian', content));


SQL:
CREATE INDEX idx_logs_created_at
ON logs USING BRIN(created_at);
3. Практические советы



SQL:
CREATE INDEX idx_users_city_age
ON users(city, age);



SQL:
DROP INDEX IF EXISTS idx_old_column;

SQL:
REINDEX INDEX idx_users_email;
4. Подводные камни



SQL:
CREATE INDEX CONCURRENTLY idx_orders_status ON orders(status);

Итог:
Индексы — мощный инструмент, если их грамотно использовать. Анализируйте планы запросов, не создавайте лишних, следите за статистикой и удаляйте устаревшие.