Вы когда-нибудь часами смотрели на медленный SQL-запрос, который тормозит дашборд, и не понимали, с чего начать? Или пытались разобраться в чужом коде с пятью JOIN и оконными функциями? Знакомо. Хорошая новость: современные LLM, такие как ChatGPT, могут стать вашим персональным наставником по SQL, если правильно составить промт. В этой подборке — 15 проверенных промтов, которые помогут вам быстрее писать, отлаживать и оптимизировать запросы, от разбора плана выполнения до рефакторинга сложных конструкций.
Промт 1: Разбор плана выполнения
Для чего: Понять, почему запрос медленный, и что именно PostgreSQL делает под капотом.
Промт:
Я работаю с PostgreSQL 15. Вот результат EXPLAIN ANALYZE моего запроса:
[вставьте сюда вывод]
Объясни, что здесь происходит, простыми словами. Укажи, где узкие места, и предложи конкретные индексы или изменения в запросе, которые могут ускорить выполнение.
Пример: Допустим, вы видите Seq Scan on orders с фильтром. ChatGPT объяснит, что это полное сканирование таблицы, и предложит добавить индекс на колонку customer_id.
Промт 2: Оптимизация JOIN
Для чего: Переписать медленный запрос с несколькими JOIN.
Промт:
Вот мой запрос, который работает слишком долго:
[вставьте SQL]
Таблицы: orders (100k строк), customers (50k), products (10k). Проанализируй план выполнения и предложи оптимизированную версию. Объясни, какие индексы создать и почему.
Пример: ChatGPT может заметить, что вы джойните по customer_id, но индекс на этой колонке отсутствует. Он предложит CREATE INDEX idx_orders_customer_id ON orders(customer_id);.
Промт 3: Оконные функции без боли
Для чего: Написать сложный запрос с ROW_NUMBER, LAG, LEAD и т.д.
Промт:
Мне нужно для каждого клиента найти его второй по дате заказ. Таблица orders: id, customer_id, order_date, amount. Напиши запрос с оконной функцией ROW_NUMBER(). Объясни, как это работает.
Пример: ChatGPT сгенерирует:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn = 2;
Промт 4: Рефакторинг сложного запроса
Для чего: Разбить монолитный запрос на понятные части.
Промт:
У меня есть ужасный запрос с 5 подзапросами и 3 CTE. Перепиши его, используя CTE, чтобы было читаемо. Вот код:
[вставьте SQL]
Пример: ChatGPT может выделить логические блоки в отдельные CTE, добавить комментарии и упростить условия.
Промт 5: Поиск и исправление ошибок
Для чего: Быстро найти синтаксическую ошибку или логическую проблему.
Промт:
Вот мой запрос, он выдает ошибку "column \"total\" does not exist":
[вставьте SQL]
Найди ошибку и объясни, как её исправить.
Пример: ChatGPT объяснит, что вы использовали алиас total в WHERE, а нужно в HAVING, и покажет правильный вариант.
Промт 6: Генерация тестовых данных
Для чего: Создать правдоподобные данные для проверки запроса.
Промт:
Сгенерируй 100 строк тестовых данных для таблицы employees (id, name, department, salary). Используй генератор series в PostgreSQL.
Пример: ChatGPT вернет запрос с generate_series(1,100) и случайными именами из списка.
Промт 7: Объяснение чужого кода
Для чего: Понять, что делает сложный SQL, написанный другим разработчиком.
Промт:
Объясни, что делает этот запрос, шаг за шагом, для новичка:
[вставьте SQL]
Пример: ChatGPT разложит запрос на части, объяснит каждую CTE и что возвращает финальный SELECT.
Промт 8: Сравнение производительности вариантов
Для чего: Выбрать оптимальный вариант из нескольких.
Промт:
У меня есть два запроса, которые возвращают одинаковый результат. Сравни их производительность и скажи, какой лучше, учитывая, что таблица большая.
Запрос A: ...
Запрос B: ...
Пример: ChatGPT проанализирует планы и скажет, что запрос с EXISTS быстрее, чем с IN, на больших объёмах.
Промт 9: Написание запроса по описанию
Для чего: Превратить бизнес-задачу в SQL.
Промт:
Напиши SQL-запрос для PostgreSQL: найти топ-10 клиентов по сумме заказов за последний месяц, включая тех, у кого нет заказов (вывести их с нулевой суммой).
Пример: ChatGPT создаст запрос с LEFT JOIN и COALESCE.
Промт 10: Исправление медленного запроса с подзапросами
Для чего: Ускорить запрос, который использует коррелированные подзапросы.
Промт:
Мой запрос с коррелированным подзапросом работает очень медленно. Перепиши его с использованием JOIN или оконной функции.
[вставьте SQL]
Пример: ChatGPT может заменить подзапрос на LEFT JOIN LATERAL или оконную функцию.
Промт 11: Форматирование SQL
Для чего: Привести запрос к читаемому виду.
Промт:
Отформатируй этот SQL-запрос в стандартном стиле: ключевые слова в верхнем регистре, отступы для подзапросов.
[вставьте SQL]
Пример: ChatGPT вернет аккуратный запрос с выравниванием.
Промт 12: Устранение дубликатов
Для чего: Написать запрос для удаления дубликатов из таблицы.
Промт:
В таблице users есть дубликаты по email. Напиши запрос, который удалит дубликаты, оставив запись с наименьшим id. Используй оконную функцию.
Пример: ChatGPT предложит:
DELETE FROM users
WHERE id IN (
SELECT id FROM (
SELECT id, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
) t WHERE rn > 1
);
Промт 13: Обучение синтаксису
Для чего: Быстро вспомнить, как использовать конкретную функцию.
Промт:
Как в PostgreSQL использовать функцию LAG()? Приведи пример с PARTITION BY и ORDER BY, объясни, что такое смещение и значение по умолчанию.
Пример: ChatGPT даст синтаксис и пример с продажами по месяцам.
Промт 14: Генерация документации
Для чего: Создать комментарии к запросу для коллег.
Промт:
Добавь комментарии к каждому блоку этого SQL, объясняя, зачем он нужен:
[вставьте SQL]
Пример: ChatGPT вставит -- комментарии перед CTE и ключевыми условиями.
Промт 15: Проверка логики запроса на тестовых данных
Для чего: Убедиться, что запрос возвращает ожидаемый результат.
Промт:
Вот запрос и небольшой набор данных. Выполни его вручную и покажи промежуточные результаты для каждого шага.
[вставьте SQL и данные]
Пример: ChatGPT смоделирует выполнение и покажет, как меняются данные после каждой CTE.
Заключение
Эти промты не заменят практики, но значительно ускорят вашу работу с SQL. Сохраните статью в закладки и используйте как шпаргалку. Экспериментируйте, комбинируйте промты — и ChatGPT станет вашим надёжным помощником в оптимизации запросов. А если у вас есть свои проверенные промты — поделитесь в комментариях!
Комментарии