DeepSeek для SQL: запросы, оптимизация, миграции

DeepSeek для SQL — один из самых недооценённых сценариев: модель пишет запросы по описанию, объясняет чужие, находит причины медленных выборок и переводит логику из Excel в код. Ошибки тоже предсказуемы: диалекты, несуществующие колонки и «оптимизация на глаз».
Ниже — как получить рабочий запрос с первого-второго раза и что проверять обязательно.
DeepSeek для SQL: что модель делает хорошо
DeepSeek для SQL экономит время на черновиках запросов и разборе чужих выборок, но не отменяет проверку: запускать на копии схемы обязательно.
- Запрос по описанию. «Дай топ-10 клиентов по выручке за квартал, исключив возвраты» — рабочий черновик за один запрос.
- Разбор чужого SQL. Что делает запрос с четырьмя JOIN и двумя подзапросами.
- Оптимизация. Где лишние сканы, какие индексы помогут, как переписать подзапрос через JOIN.
- Оконные функции. Ранжирование, накопительные итоги, сравнение с предыдущим периодом.
- Миграции. Перевод синтаксиса между PostgreSQL, MySQL и SQL Server.
- Тестовые данные. Генерация INSERT-ов и структуры таблиц для песочницы.
Как подавать схему
Главная причина плохих ответов — модель не знает вашу схему. Дайте её явно:
Схема: users(id, email, created_at, country), orders(id, user_id, total, status, created_at), order_items(order_id, product_id, qty, price). Связи: orders.user_id → users.id. СУБД: PostgreSQL 16. Напиши запрос: сумма оплаченных заказов по странам за 2026 год, топ-10 стран. Учти, что status может быть NULL.
Чем точнее описание — типы, NULL-допустимость, объёмы таблиц — тем меньше итераций.
Типичные ошибки модели
| Ошибка | Пример | Как поймать |
|---|---|---|
| Чужой диалект | LIMIT вместо TOP, :: вместо CAST | указать СУБД и версию |
| Выдуманные колонки | обращение к полю, которого нет | запустить на схеме-копии |
| NULL в сравнениях | status != 'отменён' теряет NULL |
добавить IS DISTINCT FROM или OR status IS NULL |
| Дубли из-за JOIN | сумма умножается на количество строк | сверить с контрольной суммой |
| «Оптимизация» без плана | советы по индексам без EXPLAIN | приложить план запроса |
Промпт: запрос по описанию
Ты аналитик. Схема: [DDL таблиц]. Задача: [что нужно получить]. Ограничения: PostgreSQL 16, только SELECT, без временных таблиц. Дай запрос и короткое объяснение каждого блока. Если данных для точного ответа не хватает, задай до трёх уточняющих вопросов, прежде чем писать.
Промпт: разбор плана и оптимизация
Ниже запрос и вывод EXPLAIN ANALYZE. Найди узкие места: последовательные сканы, плохие оценки кардинальности, лишние сортировки. Предложи не более трёх изменений, для каждого — ожидаемый эффект и риск. Не предлагай индексы, пока не объяснишь, на какой запрос они повлияют.
Промпт: рефакторинг
Перепиши запрос без подзапросов в SELECT: через CTE или JOIN. Сохрани результат байт в байт на тестовых данных [описание]. Покажи «до» и «после», укажи, что изменится в плане.
Безопасность
- Не давайте доступ к продакшену. Модель выполняет только то, что вы вставите руками; скрипты-агенты — отдельный риск.
- Не отправляйте дампы с персональными данными. Схема без строк достаточно для 90 % задач.
- Проверяйте DELETE и UPDATE дважды. Ошибка в WHERE обходится дороже любой экономии времени.
- Бэкап перед миграцией. Совет модели — гипотеза, а не гарантия.
Как проверять результат
Три шага: запустить на копии схемы с небольшим набором данных; сверить итог с контрольным запросом, написанным вручную; посмотреть план на предмет лишних сканов. Если сходится на малых данных и план разумный — можно на реальных.
Больше про разработку — в статье DeepSeek для программирования, про таблицы и Excel — DeepSeek для Excel.
Ещё один плюс: DeepSeek для SQL объясняет план запроса человеческим языком, если приложить вывод EXPLAIN.
Может ли DeepSeek писать SQL-запросы?
Да, включая сложные запросы с оконными функциями и CTE. Нужно указать СУБД, версию и схему таблиц — иначе модель угадывает и ошибается в именах колонок.
Можно ли доверять оптимизации от нейросети?
Как гипотезе — да, как решению — нет. Всегда проверяйте через EXPLAIN ANALYZE: советы по индексам без плана запроса часто бесполезны.
Безопасно ли отправлять схему базы в чат?
Схему без данных — да, это стандартная практика. Дампы с персональными данными отправлять нельзя: они уходят на серверы DeepSeek.
Переводит ли DeepSeek запросы между СУБД?
Да, между PostgreSQL, MySQL и SQL Server — с оговорками по функциям дат и строк. Указывайте версию и проверяйте результат на тестовой базе.