10 промтов для написания SQL-запросов и оптимизации баз данных: шпаргалка 2026
Введение
Работа с SQL — это не просто знание синтаксиса. Качественный запрос может ускорить работу приложения в десятки раз, а плохо написанный — привести к блокировкам, тайм-аутам и падению производительности. Согласно исследованию компании New Relic (2023), 78% инцидентов в production-среде связаны с неэффективными запросами к базе данных. В 2026 году, когда объёмы данных растут экспоненциально, навык написания оптимального SQL становится критически важным.
Генеративные языковые модели (LLM) способны значительно ускорить этот процесс: от написания сложных JOIN-запросов до анализа планов выполнения. Но ключ к качественному результату — правильный промт. В этой статье — 10 готовых шаблонов, которые можно копировать и адаптировать под свои задачи. Каждый промт проверен на GPT-4o, Claude 3.5 Sonnet и YandexGPT (апрель 2026).
1. Генерация JOIN-запроса с объяснением логики
Для чего: Когда нужно объединить 3+ таблицы, но вы не уверены в типе соединения (INNER vs LEFT vs RIGHT).
Промт:
Напиши SQL-запрос (PostgreSQL) для объединения таблиц [orders, customers, products].
Условия:
- Вернуть все заказы, даже если клиент удалён.
- Показать название продукта, имя клиента, дату заказа, сумму.
- Объясни, почему выбран LEFT JOIN вместо INNER.
- Добавь комментарии к каждому JOIN.
Пример использования:
SELECT
c.customer_name,
o.order_date,
p.product_name,
o.amount
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.id -- LEFT, чтобы сохранить заказы без клиента
LEFT JOIN products p ON o.product_id = p.id
WHERE o.status = 'completed';
2. Оптимизация медленного запроса (EXPLAIN ANALYZE)
Для чего: Когда запрос выполняется дольше 1 секунды, а нужно понять причину.
Промт:
Вот план выполнения запроса PostgreSQL (EXPLAIN ANALYZE). Найди узкое место и предложи 3 способа оптимизации:
[вставьте вывод EXPLAIN ANALYZE]
Требования:
- Укажи, какой индекс нужно создать.
- Предложи переписать запрос без подзапроса (если возможно).
- Оцени ожидаемое ускорение в процентах.
Результат: Модель проанализирует Sequential Scan, buffer usage и предложит, например, добавить композитный индекс на (user_id, created_at).
3. Преобразование сложного подзапроса в CTE (Common Table Expression)
Для чего: Улучшить читаемость и производительность запроса с вложенными подзапросами.
Промт:
Перепиши этот SQL-запрос (MySQL 8.0) с использованием WITH (CTE) вместо вложенных подзапросов.
Сохрани ту же логику и результат.
Объясни, почему CTE может работать быстрее в MySQL 8.0+.
Исходный запрос:
SELECT * FROM (
SELECT user_id, MAX(login_date) as last_login
FROM logins
GROUP BY user_id
) as max_logins
WHERE last_login > '2025-01-01';
4. Генерация тестовых данных
Для чего: Быстро наполнить таблицу данными для тестирования.
Промт:
Сгенерируй SQL-скрипт для вставки 1000 тестовых записей в таблицу `users` (PostgreSQL) со следующими полями:
- id (SERIAL PRIMARY KEY)
- name (случайное имя, русское)
- email (уникальный, в формате test{i}@example.com)
- created_at (timestamp, случайная дата в 2025-2026 году)
- is_active (boolean, 70% true, 30% false)
Используй generate_series() и random().
5. Анализ дубликатов и очистка данных
Для чего: Найти и удалить дублирующиеся строки без потери важных данных.
Промт:
В таблице `clients` есть дубли по email. Напиши запрос для:
1. Поиска всех дубликатов с подсчётом количества.
2. Удаления дубликатов, оставив запись с наибольшим ID.
3. Добавления UNIQUE constraint на email после очистки.
База: PostgreSQL 15.
6. Оптимизация запроса с OR (замена на UNION)
Для чего: Условия с OR часто блокируют использование индексов.
Промт:
Перепиши этот запрос так, чтобы он использовал UNION ALL вместо OR.
Объясни, почему это может ускорить выполнение.
Исходный:
SELECT * FROM orders
WHERE status = 'new' OR (status = 'processing' AND priority > 5);
7. Создание оконной функции для расчёта скользящего среднего
Для чего: Анализ временных рядов (например, продажи по дням).
Промт:
Напиши SQL-запрос для расчёта 7-дневного скользящего среднего продаж по дням.
Таблица: sales (date DATE, amount DECIMAL).
База: PostgreSQL.
Выведи: date, amount, avg_7days.
Учти: если данных меньше 7 дней — показывать NULL.
8. Диагностика блокировок (deadlocks)
Для чего: Выявить, какие запросы блокируют друг друга в production.
Промт:
Напиши запрос для PostgreSQL, который покажет:
- pid заблокированного и блокирующего процесса.
- текст текущего запроса.
- время ожидания.
- имя таблицы, на которой возникла блокировка.
Используй pg_locks и pg_stat_activity.
Отсортируй по времени ожидания (убывание).
9. Генерация SQL для миграции данных между БД
Для чего: Перенести данные из одной таблицы в другую с трансформацией.
Промт:
Напиши INSERT INTO ... SELECT для переноса данных из старой таблицы `users_v1` в новую `users_v2` с преобразованиями:
- full_name разделить на first_name и last_name.
- phone удалить все нецифровые символы.
- status 'active'/'inactive' преобразовать в boolean is_active (TRUE/FALSE).
База: PostgreSQL.
Добавь обработку ошибок (ON CONFLICT).
10. Партиционирование таблицы по дате
Для чего: Ускорить запросы к большим таблицам (миллионы строк).
Промт:
Напиши SQL для создания партиционированной таблицы `logs` по месяцам (RANGE на created_at).
Создай партиции на 2025-2026 годы.
Покажи, как вставлять данные и как выбрать данные только за январь 2026.
База: PostgreSQL 14+.
Заключение
Эти 10 промтов покрывают 90% задач, с которыми сталкивается разработчик или аналитик данных при работе с SQL. Главное правило: чем конкретнее промт — тем качественнее ответ. Указывайте версию СУБД, названия таблиц, типы данных и желаемый формат вывода. И не забывайте проверять сгенерированный код в тестовой среде — даже лучшие модели иногда ошибаются в синтаксисе или логике.
Для углублённого изучения рекомендую официальную документацию PostgreSQL (postgresql.org/docs) и книгу «SQL Performance Explained» Маркуса Винанда. А если хотите научиться автоматизировать написание таких промтов в своих проектах — изучите интеграцию с SQL-клиентами через API. ASI Biont поддерживает подключение к PostgreSQL через API — подробнее на asibiont.com/courses.
Комментарии