Я использовал этот запрос, чтобы отфильтровать магазины с городом и категориями. Он работал нормально, когда у меня было около 1000 записей в таблице stores
. Теперь, когда у меня 5000 записей, для получения результата требуется около 3-10 секунд.Как оптимизировать этот запрос с помощью whereHas?
Магазин относится ко многим категориям в моем случае.
Как я могу оптимизировать этот запрос, используя Eloquent orm или DB::raw()
?
$stores = Store::where('city_id', $city_id)
->where('disabled', '0')
->whereHas('categories', function($q) use ($category_id){
$q->where('category_id', '=', $category_id);
})
->orderBy('rating','DESC')->paginate(10);
У вас есть какие-то индексы по таблицам? Трудно сказать 100% от запроса в красноречивой форме, но этот _should_ генерирует разумный SQL. –
@JoachimIsaksson Да, обе таблицы имеют индексы. Просто подтвердили, выполнив эту команду 'SHOW INDEX FROM stores;'. –
Взгляните на эту проблему, это может помочь вам и особенно комментарий kaymes https://github.com/laravel/framework/issues/3543 –