DeepSeek Код 👁 45

DeepSeek: оптимизация медленного SQL-запроса

Промпт DeepSeek для оптимизации медленных SQL-запросов с пояснением что было не так.

Промпт Запустить →
Промокод — до 25% бонусами к первому пополнению в most-ai
Разбери медленный SQL-запрос и дай переписанную версию, которая возвращает ТОТ ЖЕ результат.

СУБД: [СУБД: PostgreSQL 16]
Запрос (замени на свой, этот рабочий — с ним промпт запускается как есть):
[SQL: SELECT c.id, c.name, (SELECT COUNT(*) FROM orders o WHERE o.client_id = c.id) AS cnt FROM clients c LEFT JOIN orders o2 ON o2.client_id = c.id WHERE c.city = 'Москва' AND o2.created_at > now() - interval '30 days' GROUP BY c.id, c.name ORDER BY cnt DESC LIMIT 50]
План выполнения:
[EXPLAIN: Seq Scan on clients (cost=0.00..18234.00 rows=412 width=36); SubPlan 1 -> Aggregate; Seq Scan on orders (cost=0.00..44.12 rows=9 width=0)]
Размер таблиц: [ОБЪЁМ: clients 400 тыс. строк, orders 18 млн строк, растёт на 40 тыс. в день]

Что нужно:
1. Что именно делает запрос медленным — по строкам плана, а не по общим соображениям.
2. Индексы: `CREATE INDEX` целиком, с точным порядком колонок, и почему порядок такой.
3. Переписанный запрос.
4. Чем новый план будет отличаться: какие операции уйдут, какие останутся.
5. Как проверить, что результат не изменился — конкретный запрос сверки на своих данных.

Отсечка. Не пиши «добавьте индекс на нужные поля» — нужны имена колонок и порядок, иначе совет
бесполезен. Не меняй семантику: если в исходнике LEFT JOIN, результат с INNER JOIN — это другой
ответ, а не оптимизация. Не предлагай сменить СУБД, добавить кеш или денормализовать таблицу,
пока не исчерпаны индексы и переписывание самого запроса. Если данных в плане не хватает, скажи,
какую строку EXPLAIN нужно доснять, и не угадывай.

Проверка перед выдачей: сравни свой запрос с исходным на трёх случаях — у клиента нет заказов,
у клиента заказы только старше 30 дней, у клиента 500 заказов. Если хотя бы в одном наборы строк
расходятся, исправь и напиши, что расходилось.
Запустить промпт →

Похожие промпты

Kimi
SQL-запрос из вопроса на русском — Kimi
DeepSeek
Данные теряются между нодами n8n
Браузерная игра одним HTML-файлом
DeepSeek
Браузерная игра одним HTML-файлом
Ролка в DeepSeek: ИИ больше не играет за вашего персонажа
DeepSeek
Ролка в DeepSeek: ИИ больше не играет за вашего персонажа
Фанфик по своему сюжету в DeepSeek: главы и характеры
DeepSeek
Фанфик по своему сюжету в DeepSeek: главы и характеры
Собеседник для разговора в DeepSeek: без советов и поддакиваний
DeepSeek
Собеседник для разговора в DeepSeek: без советов и поддакиваний
Спутник-NPC с памятью в DeepSeek: помнит обещания и спорит
DeepSeek
Спутник-NPC с памятью в DeepSeek: помнит обещания и спорит
DeepSeek
Телеграм-бот на n8n в DeepSeek: схема нод, которую можно собрать за вечер

Пример результата

Проблема: полный скан orders (1.2M строк) из-за функции в WHERE. Индексы:
CREATE INDEX idx_orders_created_at ON orders(created_at);
CREATE INDEX idx_orders_user_status ON orders(user_id, status);
Запрос:
SELECT * FROM orders
WHERE created_at >= '2025-01-01' AND created_at < '2025-02-01'
AND user_id = 42 AND status = 'paid';
Прирост: ~95% (с 3.4с до 0.15с).

Полезные статьи

Промты для программиста: 43 промпта под задачи кода
Ответы на тест по нейросетям для учителей: все вопросы с пояснениями
Промт для матрицы судьбы: два промпта и сверка расчёта

Все гайды →