SQL-запросы под микроскопом: как с помощью промтов превратить LLM в аналитика, который ускоряет запросы в 10 раз

SQL-запросы под микроскопом: как с помощью промтов превратить LLM в аналитика, который ускоряет запросы в 10 раз

Медленный SQL-запрос — это как пробка на автостраде: вроде все работает, но время уходит безвозвратно. По данным опроса Percona (2025), более 60% разработчиков сталкиваются с деградацией производительности запросов после роста данных. И тут на помощь приходят большие языковые модели (LLM). Но чтобы LLM стала настоящим аналитиком, нужны правильные промты. В этой подборке я собрал 15 проверенных шаблонов — от базовых до экспертных. Вы получите не просто список, а готовые сценарии с примерами и пояснениями. Все примеры протестированы на PostgreSQL 16.

Базовые промты: начало работы

1. Генерация SQL по описанию

Задача: быстро создать запрос с нуля.
Промт: «Ты — опытный DBA. Напиши SQL-запрос для PostgreSQL, который выводит топ-5 клиентов по сумме заказов за последний месяц. Используй таблицы customers (id, name) и orders (id, customer_id, amount, created_at).»
Пример результата:

SELECT c.name, SUM(o.amount) AS total
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.created_at >= NOW() - INTERVAL '1 month'
GROUP BY c.name
ORDER BY total DESC
LIMIT 5;

Пояснение: LLM сгенерирует корректный запрос, если явно указать СУБД и схему. Без этого можно получить синтаксис MySQL.

2. Объяснение запроса

Задача: разобраться, что делает чужой SQL.
Промт: «Объясни пошагово, что делает этот запрос, и укажи возможные узкие места: [вставить запрос]».
Результат: LLM опишет каждую часть (JOIN, WHERE, GROUP BY) и укажет на отсутствие индексов.
Пояснение: полезно для ревью кода и обучения.

3. Поиск синтаксических ошибок

Задача: исправить опечатки.
Промт: «Проверь запрос на синтаксические ошибки для PostgreSQL: [запрос]. Верни исправленную версию и объясни правки».
Результат: LLM найдет пропущенную запятую или неверный алиас.
Пояснение: экономит время на отладку.

Продвинутые промты: оптимизация и индексы

4. Анализ EXPLAIN

Задача: понять, почему запрос медленный.
Промт: «Вот вывод EXPLAIN ANALYZE для запроса: [текст плана]. Определи, какие операции самые дорогие, и предложи шаги оптимизации».
Результат: LLM укажет на Seq Scan и предложит создать индекс.
Пояснение: всегда передавайте полный план, включая buffers.

5. Рекомендация индексов

Задача: ускорить выборку.
Промт: «Для таблицы orders (id, customer_id, amount, created_at, status) и запроса: SELECT * FROM orders WHERE customer_id = 5 AND status = 'paid' ORDER BY created_at DESC; предложи оптимальные индексы. Объясни, почему они помогут».
Результат:

CREATE INDEX idx_orders_customer_status_created ON orders (customer_id, status, created_at DESC);

Пояснение: составной индекс с правильным порядком колонок.

6. Переписывание запроса

Задача: заменить неэффективную конструкцию.
Промт: «Перепиши запрос, используя JOIN вместо подзапроса в WHERE, и объясни выигрыш: [запрос]».
Результат: LLM покажет эквивалентный JOIN и расскажет о производительности.
Пояснение: подзапросы часто выполняются для каждой строки.

7. Оптимизация пагинации

Задача: ускорить OFFSET.
Промт: «У меня есть запрос с OFFSET 100000 LIMIT 20. Как переписать его на keyset-пагинацию? Приведи пример для таблицы logs (id, created_at, message)».
Результат:

SELECT * FROM logs WHERE created_at > '2025-01-01' ORDER BY created_at LIMIT 20;

Пояснение: keyset-пагинация избегает сканирования всех предыдущих строк.

Экспертные промты: глубокий анализ и тюнинг

8. Поиск антипаттернов

Задача: выявить скрытые проблемы.
Промт: «Проанализируй запрос на антипаттерны (например, SELECT *, функции в WHERE, неявные приведения типов). Предложи исправления: [запрос]».
Результат: LLM перечислит проблемы и даст рекомендации.
Пояснение: экспертный взгляд на качество кода.

9. Настройка autovacuum

Задача: уменьшить bloat.
Промт: «Таблица events имеет 100 млн строк, часто обновляется. Предложи параметры autovacuum для PostgreSQL 16, чтобы избежать раздувания».
Результат: LLM порекомендует увеличить autovacuum_vacuum_scale_factor и уменьшить autovacuum_vacuum_threshold.
Пояснение: тюнинг требует понимания нагрузки.

10. Партиционирование

Задача: разбить большую таблицу.
Промт: «Как разбить таблицу sales (id, sale_date, amount) на партиции по месяцам в PostgreSQL 16? Напиши DDL и объясни преимущества».
Результат:

CREATE TABLE sales (id serial, sale_date date, amount numeric) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2025_01 PARTITION OF sales FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');

Пояснение: партиционирование ускоряет запросы с фильтром по дате.

11. Использование CTE и оконных функций

Задача: упростить сложную аналитику.
Промт: «Перепиши запрос с множеством подзапросов, используя CTE и оконные функции для расчета ранга клиентов по сумме покупок: [запрос]».
Результат: LLM предложит конструкцию WITH и ROW_NUMBER().
Пояснение: повышает читаемость и производительность.

12. Кэширование на уровне приложения

Задача: снизить нагрузку на БД.
Промт: «Как кэшировать результаты тяжелого запроса в Redis? Напиши пример на Python с использованием redis-py и объясни инвалидацию кэша».
Результат: код с @cache и TTL.
Пояснение: не всегда нужно оптимизировать SQL — иногда лучше кэш.

13. Мониторинг pg_stat_statements

Задача: найти топ медленных запросов.
Промт: «Напиши запрос к pg_stat_statements, который выводит 10 самых ресурсоемких запросов по total_exec_time. Учти, что расширение установлено».
Результат:

SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

Пояснение: регулярный мониторинг помогает выявлять проблемы.

14. Безопасность и SQL-инъекции

Задача: проверить запрос на уязвимости.
Промт: «Проверь, есть ли в этом запросе риск SQL-инъекции: [запрос]. Если да, покажи, как использовать параметризацию».
Результат: LLM укажет на конкатенацию строк и предложит prepared statements.
Пояснение: критично для продакшена.

15. Миграция с MySQL на PostgreSQL

Задача: адаптировать запросы.
Промт: «Переведи этот MySQL-запрос на PostgreSQL, учитывая различия в синтаксисе и функциях: [запрос]».
Результат: LLM заменит IFNULL на COALESCE, DATE_FORMAT на TO_CHAR.
Пояснение: упрощает миграцию.

Как внедрять промты в рабочий процесс

Используйте эти шаблоны как основу для собственных сценариев. Комбинируйте их: сначала сгенерируйте запрос, затем проанализируйте EXPLAIN, потом оптимизируйте. Всегда проверяйте рекомендации LLM на тестовой среде. Помните, что LLM не знает вашу схему данных и статистику — предоставляйте максимум контекста.

Экспериментируйте, делитесь результатами. Если вы хотите системно прокачать навыки работы с SQL и LLM, обратите внимание на практические курсы, где разбираются реальные кейсы оптимизации. А пока — берите эти промты и ускоряйте свои запросы уже сегодня!

← Все статьи

Комментарии

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

SpaceX показала прототип AI-устройства: это смартфон будущего или новый класс гаджетов?

2 июля 2026

Docker и Kubernetes на asibiont.com: как превратить 1.2 ГБ образ в 90 МБ production-ready и задеплоить его в кластер

14 октября 2026

In the Hugging Face breach: хакер OpenAI — шумный и быстрый, но не остановимый (разбор с точки зрения vibe coding)

30 июля 2026

Что такое MCP и что он может дать: будущее AI-интеграций в 2026 году

20 июня 2026

Поток AI-контента захлестывает интернет: стартап Pangram привлек $9 млн на его обнаружение

29 июля 2026

Взлом Meta: почему безопасность ИИ — это не только «мифы» и как защитить свои данные

25 июня 2026

Low-Code без иллюзий: 12 промтов, которые превращают Bubble, Airtable и n8n в продакшн-стек

21 сентября 2026

Облачные технологии в 2026 году: почему курс «Облачные технологии — микросервисы, Kubernetes и облачные технологии» на Asibiont.com — ваш быстрый путь к мастерству

7 июля 2026

Курс «BI-аналитика и дашборды» на asibiont.com: как освоить Power BI, Tableau и Metabase и стать востребованным аналитиком

2 августа 2026