От EXPLAIN до pg_hint_plan: 15 промтов, которые выжмут из PostgreSQL максимум

Вы когда-нибудь смотрели на execution plan и чувствовали, что смотрите в бездну? Я — да. Пока не открыл для себя промты, которые превращают сырые данные EXPLAIN ANALYZE в конкретные действия. Это не магия, а системный подход: правильный запрос к LLM экономит часы ручного анализа.

В этой статье — 15 проверенных промтов для работы с PostgreSQL. Они разделены на три уровня: базовые (для повседневных задач), продвинутые (для глубокого анализа) и экспертные (для нетривиальных случаев). Каждый промт снабжён примером и пояснением, как его использовать.

Базовые промты: ежедневная оптимизация

1. Объясни execution plan простыми словами

Задача: Понять, что делает PostgreSQL при выполнении запроса.

Промт:

Ты — эксперт по PostgreSQL. Объясни следующий execution plan простыми словами, как будто я новичок. Укажи, какие операции выполняются, какие узкие места видны, и что можно оптимизировать.

[вставьте вывод EXPLAIN ANALYZE]

Пример результата:
LLM разложит план по шагам: Seq Scan на таблице orders — это полное сканирование, которое можно заменить индексом. Hash Join — соединение через хэш-таблицу, что обычно быстро, но требует памяти.

2. Найди проблемные места в запросе

Задача: Выявить основные проблемы производительности.

Промт:

Вот SQL-запрос и его execution plan. Определи, какие части запроса являются узкими местами, и предложи конкретные улучшения: индексы, переписывание запроса, настройку параметров.

Запрос: [SQL]
Plan: [EXPLAIN ANALYZE]

Пример результата:
Модель укажет, что условие WHERE lower(email) = ... препятствует использованию индекса, и предложит создать индекс по выражению lower(email).

3. Сгенерируй индекс для медленного запроса

Задача: Получить рекомендации по индексам.

Промт:

Для таблицы [имя] с колонками [список] предложи индексы, которые ускорят следующий запрос. Учитывайте селективность и типы данных.

Запрос: [SQL]

Пример результата:
Для запроса SELECT * FROM users WHERE last_login > now() - interval '30 days' модель предложит btree-индекс на last_login.

4. Проверь, использует ли запрос индекс

Задача: Убедиться, что индекс применяется.

Промт:

Проверь execution plan на предмет использования индексов. Если индекс не используется, объясни почему и что сделать, чтобы он использовался.

[plan]

Пример результата:
LLM заметит, что из-за OR условий планировщик выбирает Seq Scan, и предложит использовать UNION ALL или GIN-индекс.

5. Перепиши запрос без подзапросов

Задача: Упростить сложный запрос.

Промт:

Перепиши следующий запрос, используя JOIN вместо подзапросов, где это возможно. Сохрани логику и убедись, что результат эквивалентен.

[SQL]

Пример результата:
Подзапрос WHERE id IN (SELECT user_id FROM orders) заменяется на JOIN orders с DISTINCT.

6. Объясни разницу между типами JOIN

Задача: Понять, какой JOIN оптимален.

Промт:

Объясни разницу между INNER JOIN, LEFT JOIN и CROSS JOIN в контексте производительности. Приведи примеры, когда каждый из них предпочтителен.

Пример результата:
Модель распишет, что CROSS JOIN может создать огромные промежуточные наборы, и её стоит избегать, если нет особой нужды.

7. Настрой параметры для конкретного запроса

Задача: Улучшить производительность через конфигурацию.

Промт:

Для следующего запроса предложи настройки PostgreSQL (work_mem, shared_buffers, effective_cache_size и т.д.), которые могут ускорить его выполнение. Обоснуй.

[SQL]

Пример результата:
LLM посоветует увеличить work_mem до 64MB для сортировки, если она выполняется на диске.

Продвинутые промты: глубокий анализ

8. Анализируй статистику таблиц

Задача: Проверить актуальность статистики.

Промт:

Выполни `ANALYZE` для таблицы [table] и покажи, как изменился план запроса. Объясни, почему свежая статистика важна.

Пример результата:
После ANALYZE план изменился с Seq Scan на Index Scan, так как оценка количества строк стала точнее.

9. Используй pg_stat_statements для поиска проблем

Задача: Найти самые медленные запросы.

Промт:

На основе данных из pg_stat_statements определи топ-5 запросов по общему времени выполнения и предложи оптимизацию для каждого.

Данные: [выборка из pg_stat_statements]

Пример результата:
Модель выделит запрос с частыми вызовами и низкой селективностью, предложит кэшировать результаты.

10. Сравни планы для разных версий

Задача: Понять, как изменится план после апгрейда.

Промт:

У меня есть execution plan из PostgreSQL 12 и из 15. Сравни их и объясни, какие улучшения планировщика привели к изменениям, и что ещё можно сделать.

План 12: ...
План 15: ...

Пример результата:
LLM отметит, что в PG 15 улучшен parallel query, поэтому план стал использовать несколько воркеров.

11. Найди запросы, блокирующие другие

Задача: Диагностика блокировок.

Промт:

Вот список активных запросов из pg_stat_activity. Определи, какие из них блокируют другие, и предложи способы устранения блокировок.

Данные: [выборка]

Пример результата:
Модель увидит долгую транзакцию, которая держит блокировку на таблице, и посоветует настроить lock_timeout.

12. Оптимизируй запросы с OR

Задача: Улучшить планы с OR-условиями.

Промт:

Запрос с OR работает медленно. Предложи альтернативы: UNION ALL, IN, или изменение структуры. Покажи на примере.

[SQL]

Пример результата:
Модель заменит WHERE a = 1 OR b = 1 на WHERE a = 1 UNION ALL WHERE b = 1 и добавит индексы на обе колонки.

13. Настрой autovacuum

Задача: Улучшить работу фоновых процессов.

Промт:

Проанализируй настройки autovacuum для таблиц с большим количеством обновлений. Предложи параметры, которые уменьшат bloat.

Пример результата:
LLM порекомендует увеличить autovacuum_vacuum_scale_factor для таблицы, чтобы vacuum запускался чаще.

14. Используй временные таблицы

Задача: Ускорить сложные вычисления.

Промт:

Для следующего многошагового запроса предложи, где можно использовать временные таблицы, чтобы избежать повторных сканирований.

[SQL]

Пример результата:
Модель предложит материализовать промежуточный результат в temp table.

15. Проверь план с помощью pg_hint_plan

Задача: Принудительно указать план.

Промт:

Используя pg_hint_plan, составь хинты для запроса, чтобы заставить PostgreSQL использовать индекс [index]. Покажи синтаксис.

[SQL]

Пример результата:
/*+ IndexScan(users users_email_idx) */ SELECT * FROM users WHERE email = '...';

Экспертные промты: нетривиальные случаи

16. Разбери параллельное выполнение

Задача: Оптимизировать параллельные запросы.

Промт:

Объясни, как настроить параллельное выполнение в PostgreSQL для конкретного запроса. Укажи параметры и их влияние.

[SQL]

Пример результата:
LLM посоветует увеличить max_parallel_workers_per_gather, если запрос сканирует большую таблицу.

17. Найди проблемы с памятью

Задача: Диагностика сортировок на диске.

Промт:

В execution plan вижу 'Sort Method: external merge Disk'. Что это значит и как исправить?

[plan]

Пример результата:
Модель объяснит, что сортировка не влезла в work_mem, и предложит увеличить его или добавить индекс.

18. Оптимизируй запросы к JSONB

Задача: Ускорить работу с JSONB.

Промт:

У меня таблица с JSONB колонкой. Какие типы индексов (GIN, BTREE) лучше использовать для запросов по ключам? Приведи примеры.

[SQL]

Пример результата:
LLM покажет, как создать GIN-индекс для @> оператора.

Выводы и рекомендации

Эти промты — не панацея, а инструмент. Главное — понимать, что LLM может ошибаться, поэтому всегда проверяйте её рекомендации на тестовых данных. Начните с базовых, постепенно переходя к экспертным, и вы заметите, как ваши запросы станут быстрее.

Попробуйте применить эти промты к своим запросам уже сегодня. И не забудьте поделиться результатами в комментариях — какие промты оказались самыми полезными?

← Все статьи

Комментарии

Читайте также

Семь промтов, которые заменят ручное тестирование: как я сократил время QA на 70%

2 сентября 2026

Практическая криптография: Навигация по квантовому переходу с помощью стандартов NIST и ИИ-обучения

2 сентября 2026

Vue.js и Nuxt: современный стек для высокопроизводительных веб-приложений в 2026 году

2 сентября 2026

Стартап без PM: 12 промтов, которые заменят продакт-менеджера

2 сентября 2026

Как создать конвейер обнаружения аномалий в реальном времени с помощью TensorFlow и Kafka: практическое руководство

2 сентября 2026

Клинические исследования — Клинические испытания и GCP: Ваш карьерный путь в отрасли, управляемой данными

2 сентября 2026

Как Java и C# — корпоративная разработка на Asibiont.com сокращает затраты на микросервисы: пример использования Spring Boot и Kafka

2 сентября 2026

SEO-аудит и контент-стратегия: 10 промтов, которые заменят половину рутины

1 сентября 2026

Анализ временных рядов: от обнаружения аномалий до продакшена с Prophet и Python

1 сентября 2026