🔍 Мини-гайд: Индексы в PostgreSQL — 25 мая 2026 г. в 06:07:25.511
🔍 Мини-гайд: Индексы в PostgreSQL 1. Зачем нужны индексы? ▪️ Ускоряют SELECT, JOIN, ORDER BY, GROUP BY. ▪️Снижают нагрузку при выборках без полного сканирования таблицы. 2. Типы индексов ▪️B-tree (по умолчанию): точный поиск (=), диапазоны (<, >), сортировки. CREATE INDEX idx_users_email ON users(email); ▪️Hash: для точного сравнения, но используется редко. ▪️GIN: массивы и полнотекстовый поиск. CREATE INDEX idx_docs_content ON documents USING GIN(to_tsvector('russian', content)); ▪️GiST: геоданные (PostGIS), диапазоны (int4range, tsrange). ▪️BRIN: очень большие таблицы, где данные «почти упорядочены» (по дате). CREATE INDEX idx_logs_created_at ON logs USING BRIN(created_at); 3. Практические советы ▪️Оценивайте запросы через EXPLAIN ANALYZE или pg_stat_statements. ▪️Не создавайте индекс «про запас»: каждый замедляет INSERT/UPDATE/DELETE. ▪️Составные индексы: порядок колонок критичен. CREATE INDEX idx_users_city_age ON users(city, age); ▪️Избегайте низкокардинальных колонок (boolean, ENUM) — индекс неэффективен, если фильтр возвращает большинство строк. ▪️Актуализируйте статистику: запускайте ANALYZE после больших загрузок/удалений. ▪️Удаляйте устаревшие индексы: DROP INDEX IF EXISTS idx_old_column; ▪️Используйте REINDEX для устранения фрагментации: REINDEX INDEX idx_users_email; 4. Подводные камни ▪️Бесполезный индекс: если WHERE возвращает ≥90% строк (например, is_active = true при 99% активных). ▪️Функциональные индексы: CREATE INDEX ON table ((LOWER(name))) сработает только при точном вызове WHERE LOWER(name) = 'ivan'. ▪️Блокировки: для создания без блокировки пишите: CREATE INDEX CONCURRENTLY idx_orders_status ON orders(status); Но этот процесс дольше и требует больше места. ▪️Индексы на внешних ключах: без них при удалении/обновлении родительской записи будут долгие сканы. Итог: Индексы — мощный инструмент, если их грамотно использовать. Анализируйте планы запросов, не создавайте лишних, следите за статистикой и удаляйте устаревшие. ♻️ Сделай репост, чтобы помочь другим. 👉 @Bookflow

