SQL-промпты, которые реально экономят часы: от сложных JOIN до тонкой настройки PostgreSQL

Вы когда-нибудь тратили полдня на 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.

А если у вас есть свой любимый приём — делитесь в комментариях, я всегда за новые идеи. И не забывайте: лучшие промпты — те, что вы адаптируете под свои задачи.

← Все статьи

Комментарии

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

Как выучить английский для IT-собеседований с помощью нейросетей: 12 рабочих промтов

24 августа 2026

Промты для SMM 2026: Как ИИ превращает контент-план в вирусную машину

24 августа 2026

Горутины под контролем: 12 промтов для Go-микросервисов, которые превратят хаос в симфонию

24 августа 2026

От лид-магнита до повторных продаж: 12 промтов, которые автоматизируют вашу маркетинговую воронку

24 августа 2026

PostgreSQL и MongoDB: 12 промтов, которые заменят половину рутины в работе с БД

24 августа 2026

Научная статья и диссертация: 12 промтов, которые заменят аспиранту часы работы с литературой и рецензентами

24 августа 2026

Промты для GameDev: как заставить нейросеть проектировать уровни, баланс и диалоги

23 августа 2026

12 промтов для DevSecOps: как встроить безопасность в CI/CD без боли и костылей

23 августа 2026

12 промтов для Go, которые превратят горутины в суперсилу: от конкурентности до микросервисов

23 августа 2026