Как оптимизировать Query для Laravel

У меня более 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...

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

Вы проанализировали запрос с помощью EXPLAIN?

Jonas Staudenmeir 10.02.2019 20:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
273
1

Ответы 1

Я предлагаю использовать Построитель запросов к базе данных 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/…

Jonas Staudenmeir 10.02.2019 20:40

Другие вопросы по теме