Один медленный SQL-запрос может тормозить весь сайт: каталог открывается по 10 секунд, фильтры зависают, админка долго сохраняет данные, а сервер уходит в нагрузку. Простое увеличение тарифа не всегда решает проблему.
Коротко: нужно найти конкретный запрос, посмотреть план выполнения, индексы, объем данных и логи нагрузки.Когда это проявляется
- каталог или поиск долго отвечает
- сервер нагружается при открытии одной страницы
- админка зависает при сохранении
- фильтры товаров работают медленно
- в логах есть slow query
Что важно проверить
Оптимизация SQL начинается с измерения. Нельзя надежно ускорить запрос, если не видно, какие условия, JOIN, сортировки и индексы участвуют в работе.
- slow query log
- EXPLAIN для проблемного запроса
- индексы таблиц
- JOIN, ORDER BY и GROUP BY
- количество строк и частота выполнения
Как я решаю задачу
Я ищу запрос, который реально тормозит, а затем выбираю минимальное исправление: индекс, переписывание запроса, кеш или изменение логики.
- включаю или читаю slow query log
- нахожу тяжелые запросы
- анализирую EXPLAIN и индексы
- оптимизирую запрос или структуру таблиц
- проверяю скорость после изменений
Что подготовить
- доступ к серверу или базе
- страница или действие, которое тормозит
- CMS или фреймворк сайта
- примерное время возникновения проблемы
Сроки и результат
Иногда достаточно добавить индекс и запрос ускоряется сразу. Если проблема в архитектуре каталога или большом объеме данных, оптимизация делается поэтапно.
Вопрос-ответ
Можно просто добавить индексы ко всем полям?
Нет, лишние индексы тоже вредят и замедляют запись.
Нужен доступ к коду?
Желательно, потому что запрос часто формируется PHP-кодом или ORM.
Кеш решает проблему?
Иногда да, но сначала нужно понять, почему запрос медленный.
Нужна похожая задача?
Напишите в Telegram @rabotator_support: пришлите адрес сайта, описание проблемы и доступы, которые есть. Я посмотрю ситуацию, объясню план и скажу срок до старта.