Вы когда-нибудь ждали ответ от базы данных дольше, чем заваривается кофе? Если да — эта подборка для вас. Я собрал промты, которые ежедневно использую в работе, чтобы находить узкие места, анализировать планы запросов и выжимать максимум из PostgreSQL и MySQL. Никакой воды — только проверенные формулировки, которые реально экономят часы.
Почему промты для SQL — это must-have
Даже опытные разработчики тратят до 30% времени на оптимизацию запросов (по данным исследования Percona). Промты позволяют делегировать рутину нейросети: объяснить EXPLAIN, сгенерировать индекс, найти антипаттерн. Главное — правильно сформулировать задачу.
Промт 1: Анализ плана выполнения в PostgreSQL
Ты — эксперт по PostgreSQL. Вот результат EXPLAIN ANALYZE для запроса:
<вставьте вывод>
Найди узкие места: сканы, сортировки, вложенные циклы. Предложи конкретные исправления — индексы, переписывание, настройку параметров. Ответь по пунктам.
Пример: Я скормил промту вывод EXPLAIN для запроса с JOIN по трём таблицам. Нейросеть сразу указала на Seq Scan на таблице orders и предложила индекс по внешнему ключу. После добавления индекса время запроса упало с 800 мс до 12 мс.
Промт 2: Генерация индексов по схеме
Вот схема таблиц (CREATE TABLE statements): <вставьте>
Предложи набор индексов для типичных запросов: поиск по внешним ключам, сортировка, фильтры по дате. Для каждого индекса объясни, почему он нужен и какие запросы ускорит.
Как использовать: Отлично работает для новых проектов. Нейросеть учтёт типы данных и сгенерирует индексы, которые вы бы создали сами, но быстрее.
Промт 3: Поиск медленных запросов в логах PostgreSQL
Вот фрагмент лога медленных запросов PostgreSQL:
<вставьте>
Проанализируй, какие запросы повторяются чаще всего. Определи причины медлительности (отсутствие индексов, неоптимальные JOIN, лишние данные). Предложи план оптимизации по приоритету.
Совет: Включите log_min_duration_statement = 1000 в postgresql.conf, чтобы логировать запросы дольше секунды.
Промт 4: Рефакторинг медленного запроса в MySQL
У меня есть запрос, который выполняется 15 секунд на MySQL 8. Вот его текст и EXPLAIN:
<вставьте>
Перепиши запрос так, чтобы он использовал индексы и избегал временных таблиц. Объясни каждое изменение.
Реальный кейс: Запрос с подзапросом в SELECT и GROUP BY на 2 млн строк. Нейросеть предложила заменить подзапрос на JOIN и добавить составной индекс (user_id, created_at). Скорость выросла в 40 раз.
Промт 5: Сравнение планов PostgreSQL и MySQL
Вот один и тот же запрос и его EXPLAIN в PostgreSQL и MySQL:
<вставьте>
Сравни планы. Где эффективнее используется индекс? Какие различия в оптимизаторе влияют на производительность? Дай рекомендации для каждой СУБД.
Полезно при миграции с одной БД на другую.
Промт 6: Выявление антипаттернов в SQL
Проанализируй этот SQL-код на антипаттерны: SELECT *, отсутствие LIMIT, функции в WHERE, неявные преобразования типов. Предложи исправления.
<вставьте код>
Пример: Нейросеть нашла WHERE YEAR(created_at) = 2026 — это убивает индекс. Заменила на WHERE created_at >= '2026-01-01' AND created_at < '2027-01-01'.
Промт 7: Оптимизация запросов с оконными функциями
Вот запрос с оконной функцией ROW_NUMBER() для пагинации:
<вставьте>
Оптимизируй его: добавь индексы, перепиши, если возможно, на более эффективную конструкцию. Объясни.
Оконные функции часто тормозят на больших таблицах. Промт помогает найти альтернативы.
Промт 8: Профилирование MySQL с SHOW PROFILE
Вот вывод SHOW PROFILE для медленного запроса:
<вставьте>
Определи, на каком этапе больше всего времени (Sending data, Sorting, Copying to tmp table). Предложи оптимизацию.
Важно: SHOW PROFILE устарел в MySQL 8.0, но всё ещё работает. Для новых версий используйте Performance Schema.
Промт 9: Настройка pg_stat_statements
Вот топ-10 запросов из pg_stat_statements по общему времени:
<вставьте>
Проанализируй, какие запросы стоит оптимизировать в первую очередь. Для каждого дай рекомендации: индексы, переписывание, кэширование.
Промт 10: Генерация тестовых данных для оптимизации
Сгенерируй SQL для вставки 1 млн тестовых записей в таблицу users с реалистичными данными (имена, email, даты). Учти индексы и внешние ключи.
Как использовать: Заполните базу, чтобы проверить гипотезы оптимизации на реалистичном объёме.
Промт 11: Объяснение EXPLAIN для новичка
Объясни этот план выполнения простыми словами, как будто я новичок. Что такое Seq Scan, Index Scan, Nested Loop? Почему запрос медленный?
<вставьте EXPLAIN>
Полезно для обучения команды.
Промт 12: Оптимизация JOIN-запросов
Вот запрос с JOIN по 4 таблицам:
<вставьте>
Предложи индексы для внешних ключей и перепиши запрос, если нужно. Объясни, как оптимизатор выбирает порядок соединения.
Промт 13: Автоматизация анализа логов MySQL
Вот лог медленных запросов MySQL (slow_query_log):
<вставьте>
Сгруппируй запросы по паттернам, найди самые частые. Предложи индексы и настройки.
Промт 14: Оптимизация запросов с подзапросами
Перепиши этот запрос, заменив подзапросы на JOIN или CTE. Объясни, почему новый вариант быстрее.
<вставьте запрос>
Кейс: Подзапрос в WHERE с NOT IN на 100k строк. Замена на LEFT JOIN с IS NULL ускорила запрос в 3 раза.
Промт 15: Проверка покрывающих индексов
Вот таблица и запрос, который выбирает только поля name и email:
<вставьте>
Создай покрывающий индекс, чтобы запрос не обращался к таблице. Объясни, когда это оправдано.
Промт 16: Сравнение производительности до и после
Вот результаты EXPLAIN до и после изменений:
<вставьте>
Сравни, что улучшилось, а что стало хуже. Есть ли регресс? Что ещё можно оптимизировать?
Финальные мысли
Эти промты — не магия, а инструмент. Они экономят часы, но не заменяют понимания SQL. Используйте их как умного ассистента: проверяйте предложения, тестируйте на своих данных. Начните с промта 1 — он даст быстрый результат. А если хотите прокачаться в SQL — читайте документацию PostgreSQL и MySQL, экспериментируйте. База данных — это как шахматы: выигрывает тот, кто думает на несколько ходов вперёд.
Комментарии