Медленные запросы — это не баг, а результат того, что кто-то (скорее всего ты) писал код быстро. Laravel всё стерпит, пока не придёт реальный трафик. Потом начинается цирк: CPU горит, база воет, пользователи матерятся, менеджер плачет. Нужно не молиться, а смотреть, какие именно запросы убивают приложение.

Каждый второй Laravel-проект дохнет не потому, что фреймворк «тяжёлый», а потому что кто-то нафигачил ->with('relation')->with('another')->with('andAnother') и теперь база крутит такие JOIN’ы, что Oracle в 90-х бы позавидовал.

Чтобы понять, кто виноват, надо вытащить медленные запросы на свет. И нет, гадание по логам «почему оно тормозит» не работает. Используй инструменты, которые реально показывают, какие запросы жрут время.

Debugbar: быстрый рентген твоего кода

barryvdh/laravel-debugbar — штука для тех, кто хочет быстро увидеть, где именно ты нагадил.
Установил:

composer require barryvdh/laravel-debugbar --dev

и в дев-режиме у тебя снизу экрана висит панелька. Там видно каждый запрос, время выполнения и сколько раз ты дернул одну и ту же таблицу.

Удобно для локалки. На прод лучше не ставь, иначе твой сервер умрёт раньше тебя.

Telescope: микроскоп для всего приложения

Telescope — это не только про SQL, он ещё показывает запросы, очереди, события и прочую внутреннюю кухню. Подключается в пару команд:

composer require laravel/telescope
php artisan telescope:install
php artisan migrate

и смотришь /telescope.

Если хочешь знать, почему твой код работает как пьяный тракторист - Telescope покажет правду. Только помни: это тоже инструмент для дев-окружения, на прод тащить опасно.

Horizon: если у тебя очередь не двигается

Если запросы у тебя в очередях, а воркеры сжирают больше памяти, чем Chrome с двадцатью вкладками, ставь Horizon:

composer require laravel/horizon
php artisan horizon:install

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

Query Log: дедовский способ

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

use Illuminate\Support\Facades\DB;

public function boot()
{
    if (config('app.debug')) {
        DB::listen(function ($query) {
            logger()->debug('SQL: ' . $query->sql, $query->bindings);
        });
    }
}

Или если хочешь совсем жёстко:

dd(DB::getQueryLog());

— и сразу видишь, чем именно твой код убил базу.

Итог

Медленные запросы — это не «фича Laravel», а проблема.

  • Debugbar — быстро чекнуть локалку.
  • Telescope — копнуть глубже.
  • Horizon — если очереди живут своей жизнью.
  • Query Log — прямое вскрытие без анестезии.

Не надо гадать, «почему тормозит». Нужно открыть инструменты и увидеть: да, тут у тебя SELECT в 20 JOIN’ов, да ещё и без индексов. Всё остальное — самообман.