Вы когда-нибудь ждали ответ от базы данных дольше, чем заваривается кофе? Или получали ошибку, смысл которой теряется за стенами технического жаргона? Если да — вы не одиноки. Оптимизация SQL-запросов и проектирование схем — это искусство, которое требует не только знаний, но и опыта. Но что, если у вас есть наставник, который знает тысячи тонкостей и никогда не устаёт? В 2026 году ИИ стал таким наставником. Я собрал 15 промтов, которые помогут вам ускорить запросы, спроектировать эффективные схемы и автоматизировать рутину. Они подойдут как новичкам, так и опытным разработчикам, работающим с PostgreSQL, MySQL или любой другой реляционной СУБД.
Как использовать эти промты
Перед тем как нырнуть в подборку, пара советов: промты — это не магия, а инструмент. Чем точнее вы опишете контекст, тем полезнее будет ответ. Всегда указывайте версию СУБД, структуру таблиц (хотя бы ключевые поля) и пример данных. И помните: ИИ может ошибаться, поэтому критически проверяйте его рекомендации. Но в 90% случаев он даст направление, которое сэкономит вам часы.
Базовые промты: для ежедневных задач
1. Анализ плана выполнения запроса
Задача: Понять, почему запрос выполняется медленно, и получить конкретные рекомендации по оптимизации.
Промт:
Я работаю с PostgreSQL 15. Вот мой запрос:
SELECT u.id, u.name, COUNT(o.id) AS orders_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2025-01-01'
GROUP BY u.id, u.name
ORDER BY orders_count DESC;
Вот вывод EXPLAIN ANALYZE:
[вставьте вывод]
Объясни, где узкие места, и предложи конкретные шаги для оптимизации (индексы, изменение запроса и т.д.).
Пример результата:
ИИ проанализирует план, укажет на Seq Scan по таблице orders, предложит создать индекс на o.user_id и u.created_at, возможно, переписать запрос с использованием оконных функций для избежания группировки. Пример ответа: «У вас полное сканирование orders, что при 10M строк — катастрофа. Создайте индекс: CREATE INDEX idx_orders_user_id ON orders(user_id); Также рассмотрите частичный индекс на users для created_at».
2. Поиск отсутствующих индексов
Задача: Автоматически определить, какие индексы стоит добавить для ускорения запросов.
Промт:
Вот мой запрос:
SELECT * FROM products WHERE category_id = 5 AND price BETWEEN 100 AND 200;
И таблица products (id, name, category_id, price, created_at).
Какие индексы вы порекомендуете? Учтите, что запросов много, и индекс должен быть оптимальным.
Пример результата:
ИИ предложит композитный индекс: CREATE INDEX idx_products_category_price ON products(category_id, price); Объяснит, почему порядок полей важен, и как индекс ускорит фильтрацию.
3. Упрощение сложного JOIN
Задача: Переписать запутанный запрос с множественными JOIN, чтобы он стал читаемее и быстрее.
Промт:
У меня есть запрос с 5 JOIN, который работает, но я не уверен в его эффективности. Вот он:
SELECT ...
FROM a
JOIN b ON ...
JOIN c ON ...
JOIN d ON ...
JOIN e ON ...
WHERE ...
Объясни, как его упростить, возможно, с использованием подзапросов или CTE.
Пример результата:
ИИ предложит разбить запрос на CTE, убрать лишние JOIN, использовать EXISTS вместо IN, или наоборот. Даст объяснение, почему это улучшит производительность.
4. Генерация случайных данных для тестов
Задача: Создать набор тестовых данных для проверки запросов без реальных данных.
Промт:
Сгенерируй SQL-скрипт для PostgreSQL, который создаст 1000 записей в таблице employees (id, name, email, salary, department_id). Имена должны быть разными, email — уникальными, salary — от 30000 до 150000, department_id — от 1 до 10.
Пример результата:
ИИ выдаст скрипт с generate_series и random(), например, с использованием CTE. Пример: INSERT INTO employees (name, email, salary, department_id) SELECT 'Employee'
|| gs, 'emp' || gs || '@test.com', 30000 + (random() * 120000)::int, 1 + (random() * 10)::int FROM generate_series(1, 1000) AS gs;
5. Объяснение ошибок простым языком
Задача: Расшифровать cryptic ошибку SQL и понять, как её исправить.
Промт:
Я получаю ошибку "ERROR: duplicate key value violates unique constraint \"users_pkey\"" в PostgreSQL. Что это значит и как исправить?
Пример результата:
ИИ объяснит, что это нарушение первичного ключа, предложит проверить последовательности (sequence), использовать ON CONFLICT, или изменить логику вставки.
Продвинутые промты: для оптимизации и анализа
6. Настройка параметров PostgreSQL
Задача: Получить рекомендации по конфигурации сервера для конкретного рабочей нагрузки.
Промт:
У меня PostgreSQL 16 на сервере с 16 ГБ RAM, SSD, 8 ядер CPU. Нагрузка — смесь OLTP и OLAP. Какие параметры в postgresql.conf вы посоветуете изменить (shared_buffers, work_mem, effective_cache_size и т.д.)? Приведи конкретные значения и объясни, почему.
Пример результата:
ИИ даст начальные значения: shared_buffers = 4GB, work_mem = 64MB, effective_cache_size = 12GB, и объяснит, как их калибровать. Сошлётся на официальную документацию.
7. Оптимизация запросов с подзапросами
Задача: Переписать запрос с коррелированными подзапросами на более эффективный вариант.
Промт:
Вот запрос:
SELECT u.name, (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id AND o.status = 'completed') AS completed_orders
FROM users u
WHERE u.active = true;
Как его оптимизировать для больших таблиц?
Пример результата:
ИИ предложит использовать LEFT JOIN с группировкой или оконные функции, объяснит разницу в производительности.
8. Проектирование схемы для интернет-магазина
Задача: Спроектировать нормализованную схему БД для интернет-магазина с учётом требований.
Промт:
Спроектируй схему БД для интернет-магазина. Нужны таблицы: пользователи, товары, категории, заказы, детали заказа. Учти, что товары могут иметь несколько категорий, заказ содержит несколько товаров. Предложи поля, типы данных, ограничения и индексы.
Пример результата:
ИИ выдаст DDL-скрипты с внешними ключами, индексами, объяснит нормализацию и денормализацию для производительности.
9. Поиск и устранение блокировок
Задача: Диагностировать блокировки в PostgreSQL и предложить решения.
Промт:
В моей базе PostgreSQL периодически возникают блокировки. Приведи запросы для поиска блокировок (pg_locks) и объясни, как их интерпретировать. Также дай советы по их предотвращению.
Пример результата:
ИИ даст SQL-запросы для мониторинга, объяснит типы блокировок (RowExclusive, ShareLock и т.д.), предложит настройку lock_timeout или рефакторинг транзакций.
10. Оптимизация запросов с полнотекстовым поиском
Задача: Улучшить производительность полнотекстового поиска в PostgreSQL.
Промт:
У меня есть таблица articles с полем body (TEXT). Я использую to_tsvector для поиска. Как оптимизировать запросы, чтобы они были быстрее? Нужны ли индексы GIN?
Пример результата:
ИИ посоветует создать GIN-индекс: CREATE INDEX idx_articles_tsv ON articles USING GIN(to_tsvector('russian', body)); Объяснит, как настроить конфигурацию поиска, и предостережёт от частых обновлений.
Экспертные промты: для глубокой аналитики
11. Анализ и оптимизация хранимых процедур
Задача: Найти узкие места в хранимых процедурах и предложить улучшения.
Промт:
У меня есть хранимая процедура на PL/pgSQL, которая обрабатывает заказы. Она работает медленно при большом количестве данных. Вот код:
[вставьте код]
Проанализируй её и предложи оптимизации: возможно, использование временных таблиц, bulk operations или переписывание на SQL.
Пример результата:
ИИ укажет на циклы, которые можно заменить на set-based операции, предложит использовать CTE, и объяснит, как избежать row-by-row обработки.
12. Партиционирование больших таблиц
Задача: Получить советы по партиционированию для ускорения запросов на больших данных.
Промт:
Моя таблица events содержит 500 миллионов строк. Я планирую добавить партиционирование по дате. Опиши, как это сделать в PostgreSQL 16, какие типы партиционирования существуют, и как это повлияет на запросы.
Пример результата:
ИИ объяснит RANGE-партиционирование, даст DDL, и расскажет о преимуществах (ускорение удаления старых данных, улучшение производительности запросов с фильтром по дате).
13. Оптимизация работы с JSONB
Задача: Эффективно использовать JSONB для гибких данных и ускорить запросы.
Промт:
В PostgreSQL я храню данные в JSONB-поле. Как индексировать и запрашивать такие данные, чтобы не терять производительность? Приведи примеры использования GIN-индексов и операторов @>, ?, |
Пример результата:
ИИ даст примеры: CREATE INDEX ON table USING GIN (data jsonb_path_ops); Покажет, как использовать jsonb_path_query, и объяснит, когда лучше нормализовать данные.
14. Сравнение стратегий индексирования
Задача: Выбрать между B-tree, Hash, GIN, GiST для конкретного сценария.
Промт:
У меня есть таблица с полем tags (тип TEXT[]), и я часто ищу строки, содержащие определённый тег. Какой тип индекса лучше: GIN, GiST или обычный B-tree? Объясни, как работают эти индексы и приведи примеры.
Пример результата:
ИИ сравнит типы, порекомендует GIN для массивов, объяснит, как создать индекс на выражении, и предупредит о возможных компромиссах.
15. Автоматическая генерация отчётов по производительности
Задача: Создать промт, который генерирует отчёт по медленным запросам из pg_stat_statements.
Промт:
Используя pg_stat_statements, напиши SQL-запрос, который выдаст топ-10 самых медленных запросов за последний день. Включи среднее время выполнения, количество вызовов и долю от общего времени. Также дай рекомендации по их оптимизации.
Пример результата:
ИИ выдаст запрос с фильтром по времени, сортировкой по mean_exec_time, и затем проанализирует результаты. Пример ответа: «Вот запрос... Рекомендую добавить индекс на orders.user_id».
Как извлечь максимум из этих промтов
Главное — не просто копировать промты, а адаптировать их под ваш контекст. Добавляйте реальные планы выполнения, структуры таблиц. ИИ — это усилитель вашего интеллекта: он не заменит понимания основ, но поможет быстрее находить решения. Начните с базовых промтов, освойте их, а затем переходите к продвинутым. Уже через неделю вы заметите, как сократилось время на отладку.
Заключение
Я надеюсь, эта подборка станет вашим надёжным помощником в мире SQL. Помните, что оптимизация — это итеративный процесс: измеряйте, применяйте, снова измеряйте. И пусть ИИ будет вашим верным спутником в этом путешествии. Если у вас есть свои любимые промты — поделитесь в комментариях, будем учиться друг у друга.
Использование ИИ в работе с базами данных — это не замена экспертизе, а её расширение. Как говорится, «знание — сила», а «ИИ — рычаг» для этой силы.
Комментарии