Предложение WHERE для каждого запроса Table JOIN, замедляющего запрос

Итак, у меня есть три таблицы, к которым мне нужно присоединиться.

$query = Table::where('a.is_deleted', 0)
        ->where('b.is_deleted', 0)
        ->where('c.is_deleted', 0)
        ->leftjoin('b', 'b.mother_id', '=', 'a.mother_id')
        ->leftjoin('c', 'c.material_group_id', '=', 'a.material_group_id')
        ->get();

Проблема в том, что у меня более 6000 строк в моей таблице, и наличие предложения where для каждой таблицы сильно замедляет запрос.

Как я могу оптимизировать этот запрос?


person raz    schedule 11.01.2017    source источник
comment
Чтобы уточнить, это не Eloquent. Это конструктор запросов.   -  person Ohgodwhy    schedule 11.01.2017
comment
спасибо за исправление   -  person raz    schedule 11.01.2017


Ответы (1)


Если вы видите такое снижение производительности всего за 6 тысяч строк, единственная причина может заключаться в том, что у вас нет индексов в вашей таблице. Если вы собираетесь отфильтровать набор результатов по is_deleted и соединить его с каким-то id или другим, вам необходимо иметь индексы для этих полей. Вероятно, один составной индекс для каждой таблицы с соответствующими полями id и is_deleted. Точно так же, вероятно, необходим индекс в таблице a для каждого из идентификаторов.

person treeface    schedule 11.01.2017