← Назад к блогу
PHP 17.09.2024·3 мин чтения

Laravel Query Optimization Playbook

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

Оптимизация Laravel почти всегда начинается с запросов, а не с серверов.

Проще говоря

Практический набор приёмов для ускорения Eloquent/SQL без преждевременного усложнения архитектуры. Ниже — что именно делать на практике и где чаще всего ошибаются.

Быстрый порядок работ

  1. Снять базовый уровень: p95, query count, медленные endpoints.
  2. Убрать N+1 через eager loading.
  3. Проверить индексы по реальным WHERE/ORDER BY.
  4. Ограничить поля (select) и размер страниц.
  5. Добавить кэш только на горячие путь чтения.

Что даёт максимальный эффект

  • with() и loadMissing() в нужных местах,
  • withCount() вместо ручных циклов,
  • переход на chunkById() для больших batch-операций,
  • отказ от тяжёлых аксессоров внутри списков.

Частые ошибки

  • лечат всё Redis-кэшем,
  • не отслеживают query budget на endpoint,
  • смешивают бизнес-логику и построение сложных SQL в контроллере.

Минимальный чеклист

  • query budget на ключевые routes
  • EXPLAIN для топ медленных запросов
  • алерт на рост query count
  • быстрая проверка-тест на регресс N+1

Короткая история из команды

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

Вывод

Laravel можно держать быстрым долго, если дисциплина SQL встроена в обычный процесс разработки.

Практика для Laravel-команды

Лучше всего это внедряется через инженерные стандарты: фиксируем правила в code review checklist, CI и шаблонах pull request. Тогда качество не зависит от конкретного разработчика и сохраняется при росте команды.

Что мерить в Laravel регулярно

  • p95 для API и web-страниц,
  • query count на request,
  • доля медленных SQL,
  • частота ошибок 5xx/4xx,
  • время деплоя и откат.

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

Анти-паттерны внедрения

  1. Оптимизации делают «на глаз» без базовый уровень.
  2. Критичные улучшения не попадают в автоматические проверки.
  3. Вся логика деградации/ретраев размазана по контроллерам.
  4. Отсутствует единый runbook для инцидентов.

Мини-план внедрения

  • Сначала: 2–3 самых нагруженных endpoint-а.
  • Затем: стандарты в архитектурные гайды команды.
  • После: weekly performance review и контроль регрессий.

Мини-план внедрения без перегруза

Неделя 1: выбрать один модуль и описать текущую проблему на языке фактов. Неделя 2: внедрить решение в ограниченном контуре и добавить базовые тесты/проверки. Неделя 3: проверить эффект и оформить правило в командный стандарт.

Если подход сработал, масштабируй его на соседние участки. Если нет — зафиксируй, почему гипотеза не подтвердилась. Такой цикл экономит время и делает архитектуру практичной, а не декларативной.