10 промтов для написания SQL-запросов и оптимизации баз данных: шпаргалка 2026

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.

← Все статьи

Комментарии