Вы когда-нибудь тратили часы на отладку медленного SQL-запроса, который «работал вчера»? Или пытались вспомнить синтаксис оконных функций, пока прод моргает красным? Если да — эта подборка для вас. Я собрал 15 конкретных промтов, которые ежедневно использую как аналитик и бэкенд-разработчик. Они превращают ChatGPT в наставника по базам данных: от генерации сложных запросов до оптимизации через EXPLAIN. Никакой абстрактной теории — только готовые к копипасту формулы и реальные примеры.
1. Генерация сложного SQL по описанию задачи
Задача: Быстро получить рабочий SQL-запрос, когда вы знаете, что нужно, но не хотите писать с нуля.
Промт:
Ты — эксперт по SQL для PostgreSQL. Напиши запрос, который [описание задачи].
Учитывай: [структура таблиц, связи, условия].
Используй [CTE, оконные функции, джойны].
Верни только SQL-код без пояснений.
Пример:
«Напиши запрос, который выводит топ-5 клиентов по сумме заказов за последний месяц. Таблицы: customers(id, name), orders(id, customer_id, amount, created_at). Используй CTE и оконные функции.»
Результат: ChatGPT вернет оптимизированный запрос с EXPLAIN-планом и пояснениями, если попросить.
2. Оптимизация медленного запроса с помощью EXPLAIN
Задача: Понять, почему запрос работает медленно, и получить конкретные рекомендации.
Промт:
Вот результат EXPLAIN ANALYZE для запроса: [вставьте вывод].
Запрос: [ваш запрос].
Объясни, какие операции самые дорогие, и предложи конкретные улучшения: индексы, переписывание, изменение схемы.
Дай исправленную версию запроса.
Пример: Вы вставляете вывод EXPLAIN ANALYZE с Seq Scan на таблице в 10 млн строк. ChatGPT подскажет создать индекс и покажет, как изменится план.
3. Проектирование схемы базы данных с нуля
Задача: Сгенерировать нормализованную схему для нового проекта.
Промт:
Спроектируй схему БД для [описание проекта: сущности, связи, требования].
Используй третий нормальный вид. Для каждой таблицы укажи поля, типы, первичные и внешние ключи, индексы.
Дай DDL-скрипт для PostgreSQL.
Пример: Вы описываете интернет-магазин с товарами, заказами и пользователями. ChatGPT предложит таблицы customers, products, orders, order_items с правильными связями.
4. Написание миграций для изменений схемы
Задача: Создать безопасную миграцию, которая не сломает прод.
Промт:
Напиши SQL-миграцию для PostgreSQL, которая [что нужно изменить: добавить колонку, изменить тип, создать индекс].
Учти: [ограничения, дефолтные значения, обратную совместимость].
Дай код миграции и код отката (rollback).
Пример: Добавление колонки email_verified с дефолтом false и создание частичного индекса.
5. Объяснение разницы между JOIN-ами
Задача: Быстро освежить память или объяснить коллеге.
Промт:
Объясни разницу между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN на примере двух таблиц: employees(id, name, dept_id) и departments(id, name).
Покажи результат для каждого типа с примером данных.
Дай SQL-запросы и вывод.
Пример: ChatGPT создаст наглядные таблицы с результатами для каждого JOIN.
6. Использование оконных функций для аналитики
Задача: Рассчитать скользящее среднее, ранжирование или накопительные итоги.
Промт:
Используя оконные функции PostgreSQL, напиши запрос, который [задача: скользящее среднее продаж за 7 дней, ранг продуктов по выручке].
Покажи пример с данными и объясни, как работает каждая функция: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER.
Пример: ChatGPT сгенерирует запрос с SUM(amount) OVER (PARTITION BY ... ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW).
7. Обработка NULL-значений без ошибок
Задача: Написать запрос, который корректно обрабатывает NULL.
Промт:
Напиши SQL-запрос для [задача], который корректно обрабатывает NULL-значения в колонках [перечислить].
Используй COALESCE, NULLIF, IS NULL. Объясни, как избежать типичных ошибок с NULL в агрегациях.
Пример: Запрос, который считает средний чек, игнорируя NULL в discount, и показывает клиентов без телефона.
8. Диагностика блокировок и взаимоблокировок
Задача: Найти и устранить блокировки в PostgreSQL.
Промт:
Вот вывод pg_stat_activity: [вставьте].
Найди заблокированные процессы и объясни, что делать.
Напиши запросы для поиска блокировок, которые держатся дольше 5 минут.
Дай рекомендации по настройке lock_timeout и deadlock_timeout.
Пример: ChatGPT предложит запрос с pg_locks и pg_stat_activity для выявления блокировок.
9. Написание индексов для ускорения запросов
Задача: Подобрать оптимальные индексы.
Промт:
Для таблицы [имя] с колонками [перечислить] и частыми запросами [привести примеры] предложи индексы.
Объясни, почему B-tree, GIN или BRIN подходят для каждого случая.
Дай команды CREATE INDEX.
Пример: Для JSONB-колонки ChatGPT предложит GIN-индекс, для временных рядов — BRIN.
10. Профилирование запросов с помощью pg_stat_statements
Задача: Найти самые медленные запросы в проде.
Промт:
Напиши SQL-запрос к pg_stat_statements, который показывает топ-10 запросов по времени выполнения и количеству вызовов.
Объясни, как интерпретировать результаты и что делать с проблемными запросами.
Пример: ChatGPT вернет запрос с сортировкой по total_time и предложит оптимизировать конкретные query.
11. Генерация тестовых данных для проверки запросов
Задача: Наполнить таблицу синтетическими данными.
Промт:
Сгенерируй SQL-скрипт для вставки 1000 тестовых записей в таблицу [имя] с полями [перечислить].
Используй generate_series, random() и другие функции PostgreSQL.
Данные должны быть реалистичными (имена, даты, числа).
Пример: ChatGPT создаст скрипт с 1000 пользователей со случайными именами и датами регистрации.
12. Написание запросов для аналитики в ClickHouse
Задача: Адаптировать опыт SQL для ClickHouse.
Промт:
Напиши запрос ClickHouse для [задача: агрегация по времени, поиск аномалий].
Учти особенности: материализованные представления, секционирование, функции для работы с DateTime.
Объясни отличия от PostgreSQL, если они есть.
Пример: ChatGPT сгенерирует запрос с toStartOfDay и quantile для анализа метрик.
13. Рефакторинг сложного запроса с помощью CTE
Задача: Упростить запутанный запрос.
Промт:
Вот запутанный запрос: [вставьте].
Перепиши его с использованием CTE (WITH) для улучшения читаемости.
Сохрани логику. Объясни, что делает каждый CTE.
Пример: ChatGPT разобьет запрос на логические блоки, облегчая поддержку.
14. Поиск и удаление дубликатов в данных
Задача: Найти и удалить дублирующиеся записи.
Промт:
Напиши запрос для поиска дубликатов в таблице [имя] по полям [перечислить].
Покажи, как оставить только одну запись (например, с минимальным id).
Дай безопасный способ удаления дубликатов без блокировки таблицы.
Пример: ChatGPT предложит CTE с ROW_NUMBER() и DELETE с подзапросом.
15. Обучение написанию безопасных запросов с параметризацией
Задача: Избежать SQL-инъекций.
Промт:
Покажи, как переписать этот уязвимый запрос на Python/Node.js с использованием параметризованных запросов: [вставьте код].
Объясни, почему это важно, и приведи пример безопасного кода.
Пример: ChatGPT покажет использование %s в psycopg2 или ? в mysql2.
Что дальше?
Эти промты — не магическая таблетка, а инструмент для ускорения рутины. Лучший способ освоить их — применять на своих данных. Начните с простого: возьмите один медленный запрос из прода и спросите у ChatGPT, что не так. Через неделю вы заметите, что тратите на SQL вдвое меньше времени.
А если вы хотите системно прокачать навыки работы с базами данных — загляните в блог ASI Biont: там мы разбираем реальные кейсы оптимизации и автоматизации аналитики. Подпишитесь, чтобы не пропустить новые материалы!
Комментарии