Пятый фактор
Обсудить задачу
Скорость и стабильность

Оптимизация SQL-запросов MySQL и PostgreSQL

Найдём SQL-запросы, из-за которых медленно открываются страницы, отчёты или API, и устраним подтверждённые причины задержки в MySQL, MariaDB или PostgreSQL. Сравним время, план и объём чтения до и после, проверим корректность данных и безопасно применим изменения.

Срок: 8 рабочих дней

Когда стоит обратиться

Обычно к нам обращаются в таких ситуациях:

  • Карточка товара, фильтр, отчёт или API долго ждёт базу, хотя веб-сервер и внешние сервисы отвечают быстро.
  • В MySQL растёт журнал медленных запросов, а один и тот же SQL суммарно занимает заметную часть времени базы.
  • В PostgreSQL pg_stat_statements показывает запросы с большим общим временем, чтением блоков или нестабильным планом.
  • После роста таблицы прежний фильтр читает слишком много строк, создаёт временную сортировку или выбирает неподходящий индекс.
  • Приложение выполняет десятки похожих запросов для одной страницы — типичный сценарий N+1.

Что именно мы сделаем

01

Фиксируем медленный пользовательский сценарий и собираем запросы, которые выполняются внутри него.

02

Сравниваем частоту, время и суммарное влияние запросов по журналам и метрикам базы.

03

Разбираем план выполнения, фактические строки, чтение, сортировки, временные данные и блокировки.

04

Исправляем SQL, индексы или повторные вызовы приложения и проверяем влияние на запись.

05

Повторяем тот же сценарий и передаём сравнение до и после вместе с порядком наблюдения.

Что входит в стоимость

29 900 ₽ за всю работу

Находим запросы с наибольшим влиянием по журналам и метрикам, разбираем план выполнения, фактическое число строк, чтение из памяти и диска, сортировки, временные данные и блокировки. Исправляем SQL, индексы и связанные участки кода, проверяем влияние на чтение и запись и повторяем тот же пользовательский сценарий.

Что будет готово

Материалы

Передадим вам

  • Исправленные SQL-запросы, индексы и связанные участки кода, прошедшие контрольную проверку.
  • Сравнение времени, фактических строк, чтения и плана выполнения до и после.
  • Проверка результата запросов и влияния индексов на основные операции записи.
  • Перечень оставшихся наблюдений и инструкция по slow log, pg_stat_statements или действующему мониторингу.
Проверка

Перед сдачей проверим

  • Тот же пользовательский сценарий и SQL повторены на сопоставимых данных до и после изменения.
  • Результат выборки сохранился, а план и фактическое число обработанных строк подтверждают причину изменения.
  • Добавленный индекс проверен на чтении и на основных операциях добавления или обновления данных.
  • Заказчик получает таблицу замеров и может увидеть новые медленные запросы после выпуска.

Как это выглядит на практике

Этапы оптимизации SQL-запроса: сбор фактов, анализ плана, точечное изменение и контрольный замер

Фильтр каталога отвечает быстрее

Фильтр каталога по категории, наличию и цене с сортировкой по популярности стал медленным после роста товарной таблицы. План показал чтение большой части данных и отдельную сортировку, а приложение дополнительно запрашивало характеристики каждой позиции.

Мы проверили порядок полей составного индекса под реальный фильтр, убрали повторные выборки и повторили тот же сценарий. Отдельный тест обновления товара подтвердил, что индекс подходит и для рабочей нагрузки.

  1. 01

    По журналу и трассировке страницы находим запрос фильтра и повторные выборки характеристик.

  2. 02

    Сверяем оценку планировщика с фактическими строками, чтением и сортировкой.

  3. 03

    Проверяем составной индекс и корректируем SQL либо получение связанных данных приложением.

  4. 04

    Повторяем фильтр и обновление товара, фиксируя результаты в сравнительной таблице.

Что понадобится для работы

От вас

  • Доступ к базе, журналам и метрикам сервера с правами, достаточными для диагностики.
  • Ссылка на медленную страницу, API-метод или отчёт и шаги, по которым задержка воспроизводится.
  • Тестовая копия либо выбранное окно для проверки индексов и изменений на сопоставимых данных.

Если у вас немного другая ситуация

Небольшие уточнения, которые помогают довести согласованный результат до рабочего состояния, уже учитываем в цене. Если по ходу работы появится отдельный крупный блок или понадобится платная лицензия, сначала обсудим варианты и стоимость. Расскажите о своей ситуации — подстроим план под неё.

Стоимость работ 29 900 ₽ полная стоимость известна заранее
  1. 3 000 ₽после подписания договора через Диадок
  2. 26 900 ₽после выполнения, демонстрации и приёмки результата

Предоплата входит в общую стоимость. Оставшуюся сумму оплачиваете после демонстрации и приёмки готовой работы.

Часто спрашивают

Об этой услуге

Чем оптимизация отличается от мониторинга SQL-запросов?

Мониторинг постоянно собирает и показывает медленные запросы. Здесь задача практическая: выбрать подтверждённые узкие места, исправить SQL, индексы или вызовы приложения и сравнить одинаковый сценарий до и после.

Можно начать работу без включённого slow query log?

Да. Используем доступные метрики приложения, Performance Schema, pg_stat_statements, трассировку конкретного сценария или временный диагностический сбор. Подход выбираем по СУБД и допустимой нагрузке.

Нужен доступ к рабочей базе?

Для точной диагностики полезны планы, статистика и журналы рабочей нагрузки. Изменения и фактическое выполнение потенциально опасных операций проводим на копии либо в выбранном безопасном режиме.

Новый индекс может замедлить добавление и обновление данных?

Да, каждый индекс требует обслуживания при записи. Поэтому проверяем пользу для выбранных запросов и влияние на INSERT и UPDATE, а лишние или дублирующие индексы не добавляем.

С какими базами данных вы работаете?

Основные направления — MySQL, MariaDB и PostgreSQL. Для каждой системы используем её журналы, статистику, формат плана и правила обслуживания.

Безопасно ли выполнять EXPLAIN ANALYZE?

Команда и поддерживаемые операторы зависят от СУБД: в PostgreSQL и MySQL используется EXPLAIN ANALYZE, в MariaDB — ANALYZE statement. Такой анализ фактически выполняет запрос, поэтому режим проверки выбираем с учётом типа операции, нагрузки и объёма данных; изменяющие операции проверяем на копии либо в транзакции с откатом.

Что будет, если задержка оказалась в PHP или внешнем API?

Покажем замеры, которые отделяют время базы от приложения и внешнего вызова. Точечную связанную правку можем выполнить в рамках выбранной работы; крупную задачу разложим на понятный следующий этап.

Как проходит возврат изменений?

Для каждого индекса, SQL-изменения или настройки фиксируем обратное действие. Перед выпуском сохраняем исходное состояние, а после публикации контролируем тот же сценарий и метрики базы.

Цена и изменения по ходу работы

Цена на странице окончательная?

Да. Перед началом мы сверяем исходные данные и фиксируем результат в договоре. Указанная на странице сумма покрывает согласованную работу целиком, даже если её техническая реализация потребует больше времени, чем ожидалось при оценке.

Что означает резерв незапланированных работ?

Это уже включённый в цену запас времени на небольшие связанные уточнения заказчика, которые появляются после старта: например, добавить поле, изменить формат уведомления или учесть ещё одно условие обработки.

Резерв рассчитывается по формуле: стоимость услуги × 30% ÷ 1 500 ₽. Для услуги за 30 000 ₽ это 6 часов. Эти часы относятся только к дополнительным, заранее незапланированным уточнениям. Они не являются сроком проекта и не ограничивают время на основную работу: согласованный результат мы выполняем полностью.

Можно уточнять детали уже во время работы?

Да. Небольшие связанные изменения обычно помещаются во включённый резерв и не требуют доплаты. Если новая идея заметно меняет результат или превращается в самостоятельную задачу, сначала обсудим подход и стоимость. Любое решение согласуем до выполнения.

Начало работы и оплата

Как оформляются договор и оплата?

Подписываем договор через Диадок. Предоплата составляет 3 000 ₽ и входит в общую стоимость услуги. Остаток оплачивается после демонстрации и приёмки готового результата.

Когда начинается срок выполнения?

Срок отсчитывается после согласования задачи, получения необходимых доступов и материалов, подписания договора и поступления предоплаты. Конкретную дату старта и плановый день готовности подтверждаем перед началом.

Как учитываются платные лицензии и внешние сервисы?

До старта проверяем, нужны ли тарифы, лицензии, сертификаты или дополнительные ресурсы внешних систем. Если они потребуются, заранее покажем варианты и стоимость. По возможности аккаунты и лицензии оформляются сразу на заказчика.

Проверка результата и гарантия

Как принимается готовая работа?

Вместе проверяем согласованные сценарии на контрольных данных или тестовой копии, а затем демонстрируем результат. Для интеграций сверяем передачу данных и обработку ошибок, для сайта — работу нужных страниц и действий пользователя, для отчёта — расчёты и обновление данных.

Какая гарантия действует после сдачи?

На выполненные изменения действует гарантия 3 месяца. Если в изменённой нами части обнаружится ошибка нашей реализации, проверим и исправим её без дополнительной оплаты. Переданные материалы, настройки и код остаются у заказчика.

Следующий шаг

Опишите задачу

Расскажите, что происходит сейчас и какой результат хотите получить. Можно указать сайт, CMS, 1С, CRM, ERP или другую систему. Если подходящую услугу выбирать рано, просто опишите ситуацию — мы разберёмся и предложим следующий шаг.