Оптимизация SQL-запросов MySQL и PostgreSQL
Найдём SQL-запросы, из-за которых медленно открываются страницы, отчёты или API, и устраним подтверждённые причины задержки в MySQL, MariaDB или PostgreSQL. Сравним время, план и объём чтения до и после, проверим корректность данных и безопасно применим изменения.
Когда стоит обратиться
Обычно к нам обращаются в таких ситуациях:
- Карточка товара, фильтр, отчёт или API долго ждёт базу, хотя веб-сервер и внешние сервисы отвечают быстро.
- В MySQL растёт журнал медленных запросов, а один и тот же SQL суммарно занимает заметную часть времени базы.
- В PostgreSQL pg_stat_statements показывает запросы с большим общим временем, чтением блоков или нестабильным планом.
- После роста таблицы прежний фильтр читает слишком много строк, создаёт временную сортировку или выбирает неподходящий индекс.
- Приложение выполняет десятки похожих запросов для одной страницы — типичный сценарий N+1.
Что именно мы сделаем
Фиксируем медленный пользовательский сценарий и собираем запросы, которые выполняются внутри него.
Сравниваем частоту, время и суммарное влияние запросов по журналам и метрикам базы.
Разбираем план выполнения, фактические строки, чтение, сортировки, временные данные и блокировки.
Исправляем SQL, индексы или повторные вызовы приложения и проверяем влияние на запись.
Повторяем тот же сценарий и передаём сравнение до и после вместе с порядком наблюдения.
Что входит в стоимость
29 900 ₽ за всю работу
Находим запросы с наибольшим влиянием по журналам и метрикам, разбираем план выполнения, фактическое число строк, чтение из памяти и диска, сортировки, временные данные и блокировки. Исправляем SQL, индексы и связанные участки кода, проверяем влияние на чтение и запись и повторяем тот же пользовательский сценарий.
Что будет готово
Передадим вам
- Исправленные SQL-запросы, индексы и связанные участки кода, прошедшие контрольную проверку.
- Сравнение времени, фактических строк, чтения и плана выполнения до и после.
- Проверка результата запросов и влияния индексов на основные операции записи.
- Перечень оставшихся наблюдений и инструкция по slow log, pg_stat_statements или действующему мониторингу.
Перед сдачей проверим
- Тот же пользовательский сценарий и SQL повторены на сопоставимых данных до и после изменения.
- Результат выборки сохранился, а план и фактическое число обработанных строк подтверждают причину изменения.
- Добавленный индекс проверен на чтении и на основных операциях добавления или обновления данных.
- Заказчик получает таблицу замеров и может увидеть новые медленные запросы после выпуска.
Как это выглядит на практике
Фильтр каталога отвечает быстрее
Фильтр каталога по категории, наличию и цене с сортировкой по популярности стал медленным после роста товарной таблицы. План показал чтение большой части данных и отдельную сортировку, а приложение дополнительно запрашивало характеристики каждой позиции.
Мы проверили порядок полей составного индекса под реальный фильтр, убрали повторные выборки и повторили тот же сценарий. Отдельный тест обновления товара подтвердил, что индекс подходит и для рабочей нагрузки.
- 01
По журналу и трассировке страницы находим запрос фильтра и повторные выборки характеристик.
- 02
Сверяем оценку планировщика с фактическими строками, чтением и сортировкой.
- 03
Проверяем составной индекс и корректируем SQL либо получение связанных данных приложением.
- 04
Повторяем фильтр и обновление товара, фиксируя результаты в сравнительной таблице.
Что понадобится для работы
От вас
- Доступ к базе, журналам и метрикам сервера с правами, достаточными для диагностики.
- Ссылка на медленную страницу, API-метод или отчёт и шаги, по которым задержка воспроизводится.
- Тестовая копия либо выбранное окно для проверки индексов и изменений на сопоставимых данных.
Если у вас немного другая ситуация
Небольшие уточнения, которые помогают довести согласованный результат до рабочего состояния, уже учитываем в цене. Если по ходу работы появится отдельный крупный блок или понадобится платная лицензия, сначала обсудим варианты и стоимость. Расскажите о своей ситуации — подстроим план под неё.
- 3 000 ₽после подписания договора через Диадок
- 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 месяца. Если в изменённой нами части обнаружится ошибка нашей реализации, проверим и исправим её без дополнительной оплаты. Переданные материалы, настройки и код остаются у заказчика.