У меня более 60 000 записей, и я использую Has() для получения записей по отношениям, но это замедляет работу более чем на 5 с с нумерацией страниц и на 2 с для запроса.
$products = Item::has('product_save');
мой запрос:
select * from `products` where exists (select * from `product_saves` where `products`.`id` = `product_saves`.`product_id` and `user_id` = 2)
Я использую Item для выполнения того же условия и фильтрации по where(). Например, продукт все еще активен или нет цены между 5 и 88...
Любой способ оптимизировать его? Я добавил индекс в таблицу, но все еще медленно.






Я предлагаю использовать Построитель запросов к базе данных Laravel вместо ORM, а также выбрать что-то вроде 1 вместо всех (*) в вашем подзапросе. попробуй это:
DB::table('products')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('product_saves')
->whereRaw('products.id = product_saves.product_id AND user_id = 2');
})
->get();
Производительность select 1 идентична select *: dev.mysql.com/doc/refman/8.0/en/…
Вы проанализировали запрос с помощью
EXPLAIN?