Как оптимизировать Query для Laravel - PullRequest
0 голосов
/ 10 февраля 2019

У меня более 60 тыс. Записей, и я использую 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 ...

Есть ли способ оптимизировать его?Я добавил индекс в таблицу, но все еще медленно.

1 Ответ

0 голосов
/ 10 февраля 2019

Я предлагаю использовать построитель запросов базы данных 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();
...