Вы когда-нибудь тратили полдня на debugging медленного запроса, чтобы в итоге понять, что дело в отсутствующем индексе? Я — да, и именно поэтому теперь почти всё общение с базой данных у меня проходит через AI-ассистента. За последние пару лет я накопил коллекцию промптов, которые стабильно экономят мне 2–3 часа в день. Ниже — 12 проверенных вариантов, от базовых до продвинутых, с примерами и пояснениями. Берите и пользуйтесь.
1. Написание сложного JOIN с нуля
Когда нужно быстро получить выборку из нескольких таблиц, а структура БД не даёт готового запроса, я использую такой промпт:
«Напиши SQL-запрос для PostgreSQL, который из таблиц orders, customers и order_items выводит имя клиента, сумму заказа и количество позиций. Учти, что у заказа может не быть позиций — используй LEFT JOIN. Верни только выполненные заказы за последний месяц.»
Пример ответа:
SELECT
c.name,
SUM(oi.quantity * oi.price) AS total_amount,
COUNT(oi.id) AS item_count
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.id
LEFT JOIN order_items oi ON o.id = oi.order_id
WHERE o.status = 'completed'
AND o.created_at >= NOW() - INTERVAL '1 month'
GROUP BY c.name;
Почему это работает: AI сразу учитывает типичные грабли (LEFT JOIN для отсутствующих позиций, агрегацию, фильтр по дате). Вам не нужно вспоминать синтаксис — просто опишите задачу словами.
2. Оптимизация медленного запроса
Когда запрос выполняется слишком долго, я прошу AI проанализировать его:
«Вот SQL-запрос к PostgreSQL. Он выполняется 12 секунд на таблице с 5 млн строк. Найди узкие места и предложи оптимизацию. Запрос: [вставьте ваш запрос]»
AI обычно предлагает:
- Добавить индексы на поля в WHERE и JOIN
- Переписать подзапросы на JOIN
- Использовать EXPLAIN ANALYZE для проверки
Пример улучшения:
-- До
SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE region = 'EU');
-- После
SELECT o.* FROM orders o JOIN customers c ON o.customer_id = c.id WHERE c.region = 'EU';
Промпт экономит время на ручном анализе плана выполнения.
3. Генерация схемы БД по описанию
Проектируя новую фичу, я часто прошу AI набросать схему:
«Спроектируй таблицы для блога: пользователи, посты, комментарии, лайки. Учти, что у поста может быть много комментариев, а лайк ставится один раз на пост. Добавь первичные и внешние ключи, индексы для внешних ключей и поля created_at/updated_at.»
AI генерирует:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
title TEXT NOT NULL,
content TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_posts_user_id ON posts(user_id);
Это заменяет черновик на бумаге и сразу даёт рабочий DDL.
4. Рефакторинг кучи дублирующихся запросов
Когда в коде проекта встречается десяток почти одинаковых SELECT, я прошу AI унифицировать:
«У меня есть три похожих запроса: один выбирает заказы по клиенту, второй — по дате, третий — по статусу. Объедини их в один запрос с параметрами, используя COALESCE или CASE.»
Результат: один параметризованный запрос вместо трёх копипаст.
5. Объяснение плана выполнения (EXPLAIN)
«Вот вывод EXPLAIN ANALYZE для моего запроса. Объясни, почему он использует Seq Scan на таблице orders, и предложи, как переключить на Index Scan. Вывод: [вставьте вывод]»
AI расшифрует термины (Seq Scan, Index Scan, Nested Loop) и подскажет, какой индекс создать.
6. Написание запроса с оконными функциями
«Используя оконную функцию ROW_NUMBER(), выбери для каждого клиента его последний заказ. Таблицы: customers, orders.»
AI выдаёт:
SELECT * FROM (
SELECT
c.name,
o.*,
ROW_NUMBER() OVER (PARTITION BY c.id ORDER BY o.created_at DESC) AS rn
FROM customers c
JOIN orders o ON o.customer_id = c.id
) sub WHERE rn = 1;
Оконные функции — частая боль, а промпт решает её за секунды.
7. Генерация тестовых данных
«Сгенерируй 1000 строк для таблицы users: случайные имена из списка, email в формате имя+число@example.com, дата создания за последний год. Используй generate_series и random().»
Пример:
INSERT INTO users (name, email, created_at)
SELECT
'User' || i,
'user'
|| i || '@example.com',
NOW() - (random() * 365) * INTERVAL '1 day'
FROM generate_series(1, 1000) AS i;
Идеально для нагрузочного тестирования.
8. Оптимизация запроса с подзапросами
«Перепиши этот запрос с подзапросами в JOIN, чтобы улучшить производительность. Запрос: [вставьте]»
AI превращает IN (SELECT ...) в JOIN и объясняет, почему это быстрее.
9. Проверка запроса на уязвимости SQL-инъекций
«Проанализируй этот код на языке Python с SQL-запросом. Есть ли риск SQL-инъекции? Если да, исправь, используя параметризованные запросы. Код: [вставьте]»
AI укажет на конкатенацию строк и предложит безопасный вариант через psycopg2 или SQLAlchemy.
10. Поиск дубликатов в данных
«Напиши запрос, который находит дубликаты email в таблице users (когда email повторяется более одного раза). Выведи email и количество повторений.»
Ответ:
SELECT email, COUNT(*) AS cnt
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
11. Генерация отчёта с группировкой по месяцам
«Сделай выборку по продажам: сумма за каждый месяц текущего года, с группировкой по месяцам. Используй date_trunc.»
AI даёт:
SELECT
date_trunc('month', created_at) AS month,
SUM(amount) AS total
FROM sales
WHERE created_at >= '2026-01-01'
GROUP BY month
ORDER BY month;
12. Настройка параметров PostgreSQL для ускорения
«Какие настройки PostgreSQL стоит изменить для ускорения запросов на read-heavy нагрузке? Дай конкретные параметры из postgresql.conf с рекомендуемыми значениями.»
AI посоветует shared_buffers, effective_cache_size, work_mem и т.д., с пояснениями.
13. Поиск и удаление дубликатов с сохранением одной записи
«Удали дубликаты из таблицы products по полю sku, оставив запись с наименьшим id.»
AI генерирует:
DELETE FROM products a
USING products b
WHERE a.sku = b.sku AND a.id > b.id;
14. Объяснение разницы между UNION и UNION ALL
«Объясни разницу между UNION и UNION ALL в PostgreSQL, приведи пример, когда использовать каждый.»
AI даст чёткое объяснение с примером, что экономит время на поиске в доках.
15. Автоматическое создание индексов по логам медленных запросов
«Вот список медленных запросов из pg_stat_statements. Предложи, какие индексы создать для их ускорения. Список: [вставьте]»
AI проанализирует WHERE и ORDER BY и предложит составные индексы.
Это моя рабочая подборка — она покрывает 90% повседневных задач. Конечно, AI не заменит понимания основ SQL, но он отлично снимает рутину. Попробуйте один из этих промптов сегодня — и, возможно, вы тоже перестанете бояться сложных JOIN.
А если у вас есть свой любимый приём — делитесь в комментариях, я всегда за новые идеи. И не забывайте: лучшие промпты — те, что вы адаптируете под свои задачи.
Комментарии