Введение
SQL остаётся одним из самых востребованных навыков в разработке, но даже опытные инженеры тратят часы на отладку сложных запросов и поиск узких мест в производительности. С появлением больших языковых моделей (LLM) в 2026 году написание и оптимизация SQL стали значительно быстрее — если знать правильные промты. В этой подборке я делюсь 10 проверенными промтами, которые использую ежедневно для генерации запросов, рефакторинга и анализа планов выполнения. Каждый пример — из реальных проектов, с пояснениями, как адаптировать под вашу схему.
1. Генерация базового SELECT с JOIN
Промт:
Напиши SQL запрос для PostgreSQL, который выбирает из таблицы
ordersвсе заказы пользователей из таблицыusers, где сумма заказа больше 1000. Используй INNER JOIN. Выведи: имя пользователя, email, дату заказа и сумму. Отсортируй по сумме по убыванию.
Результат:
SELECT u.name, u.email, o.order_date, o.total_amount
FROM orders o
INNER JOIN users u ON o.user_id = u.id
WHERE o.total_amount > 1000
ORDER BY o.total_amount DESC;
Совет: Всегда указывайте СУБД (PostgreSQL, MySQL, SQLite) — это влияет на синтаксис и доступные функции. Добавляйте пример данных или структуру таблиц, если запрос сложный.
2. Оптимизация медленного запроса с EXPLAIN ANALYZE
Промт:
У меня есть медленный запрос к PostgreSQL. Вот его план выполнения (EXPLAIN ANALYZE): [вставьте план]. Запрос: [вставьте запрос]. Определи узкие места и предложи оптимизации: индексы, переписывание, изменение join-стратегии. Объясни каждую рекомендацию.
Пример использования:
Допустим, план показывает Seq Scan на таблице с миллионом строк. AI предложит добавить индекс на столбец, используемый в WHERE, или заменить JOIN на EXISTS.
3. Рефакторинг хранимой процедуры
Промт:
Перепиши эту хранимую процедуру на PostgreSQL, чтобы она работала быстрее. Убери курсоры, используй set-based операции. Вот текущий код: [вставьте код]. Добавь комментарии к изменениям.
Пример:
Курсор, обновляющий строки по одной, заменяется на UPDATE с подзапросом. AI может предложить использовать CTE или оконные функции.
4. Создание индексов по шаблону запросов
Промт:
У меня есть таблица
transactionsс колонками: id, user_id, amount, created_at, status. Вот три самых частых запроса:
1. SELECT * FROM transactions WHERE user_id = ? AND status = 'completed';
2. SELECT SUM(amount) FROM transactions WHERE created_at BETWEEN ? AND ?;
3. SELECT * FROM transactions ORDER BY created_at DESC LIMIT 100;
Предложи набор индексов (включая составные), которые ускорят эти запросы. Объясни, почему каждый индекс нужен.
Результат:
- Составной индекс на (user_id, status) для первого запроса.
- Индекс на (created_at) для второго и третьего.
- Возможно, частичный индекс для первого.
5. Генерация запроса с оконными функциями
Промт:
Напиши SQL запрос для PostgreSQL, который для каждого пользователя из таблицы
usersпоказывает последние 5 заказов из таблицыorders. Используй ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC). Выведи: user_id, name, order_id, order_date, total_amount.
Результат:
WITH ranked AS (
SELECT u.id AS user_id, u.name, o.id AS order_id, o.order_date, o.total_amount,
ROW_NUMBER() OVER (PARTITION BY u.id ORDER BY o.order_date DESC) AS rn
FROM users u
INNER JOIN orders o ON u.id = o.user_id
)
SELECT user_id, name, order_id, order_date, total_amount
FROM ranked
WHERE rn <= 5;
6. Диагностика блокировок и deadlock
Промт:
В PostgreSQL возник deadlock. Вот лог: [вставьте лог]. Объясни причину и предложи способ предотвратить: порядок блокировок, таймауты, уровень изоляции. Напиши запрос для поиска текущих блокировок.
Пример ответа:
AI объяснит, что deadlock часто возникает при разном порядке обновления строк. Предложит применить pg_blocking_pids() и использовать NOWAIT.
7. Преобразование плохого запроса в эффективный
Промт:
Этот запрос выполняется 10 секунд. Перепиши его без подзапросов в SELECT, используй JOIN или LATERAL. Вот текущий запрос: [вставьте]. Объясни, почему подзапросы в SELECT медленные.
Теория:
Коррелированные подзапросы выполняются для каждой строки внешнего запроса. Замена на JOIN с группировкой или LATERAL может сократить время.
8. Создание тестовых данных
Промт:
Сгенерируй SQL скрипт для PostgreSQL, который заполняет таблицу
products1000 случайными записями. Колонки: id (serial), name (varchar(100)), price (decimal между 10 и 500), created_at (timestamp за последний год). Используй generate_series и random().
Результат:
INSERT INTO products (name, price, created_at)
SELECT
'Product ' || i,
round((random() * 490 + 10)::numeric, 2),
now() - (random() * interval '365 days')
FROM generate_series(1, 1000) AS i;
9. Анализ использования индексов
Промт:
Напиши запрос, который показывает все индексы в схеме public базы PostgreSQL, их размер, количество сканирований и процент использования. Отсортируй по размеру. Используй pg_stat_user_indexes и pg_indexes.
Результат:
SELECT
relname AS table_name,
indexrelname AS index_name,
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
idx_scan AS number_of_scans,
CASE WHEN idx_scan > 0 THEN 'Used' ELSE 'Unused' END AS status
FROM pg_stat_user_indexes
ORDER BY pg_relation_size(indexrelid) DESC;
10. Генерация документации по схеме
Промт:
На основе этой схемы базы данных (список таблиц и колонок) создай описание на русском для документации: для каждой таблицы — назначение, ключевые колонки, связи с другими таблицами. Формат: Markdown.
Пример:
### Таблица `orders`
- **Назначение**: Хранит заказы пользователей.
- **Ключевые колонки**:
- `id` (PK) — уникальный идентификатор заказа.
- `user_id` (FK → users.id) — пользователь, сделавший заказ.
- `total_amount` — общая сумма заказа.
- **Связи**: один заказ может иметь много строк в `order_items`.
Заключение
Эти 10 промтов покрывают 90% повседневных задач: от написания новых запросов до глубокой оптимизации. Главное — давать модели контекст: тип СУБД, схему, пример данных и ожидаемый результат. Со временем вы научитесь формулировать промты так, чтобы получать готовый код без правок. Помните: AI — это ассистент, а не замена. Всегда проверяйте сгенерированные запросы на тестовой базе, особенно если они затрагивают продуктивные данные.
Если вы хотите научиться интегрировать SQL-генерацию в свои проекты или автоматизировать рутину, обратите внимание на курсы, где разбираются реальные кейсы и даются готовые шаблоны промтов.
Комментарии