Область работает очень медленно, в то время как ее коллега SQL работает быстро - PullRequest
0 голосов
/ 14 апреля 2020

Это моя структура таблицы:

messages

| id | user_id | subject | body | parent_id |

messages_user
| id | message_id | user_id |

В сообщении модели. php У меня есть эта область:

public function scopeForMe($query)
{
    $userId = Auth::user()->id;
    return $query->whereRaw('(id in (select coalesce(parent_id, message_id) from message_user mu join messages m on (mu.message_id = m.id) where mu.user_id = ?) or user_id = ?)', [$userId, $userId]);
}

при запуске

Message::forMe();

загрузка занимает массу времени - ~ 7 секунд. Сообщения имеют 704 записи, а message_user - 1194.

Когда я запускаю этот запрос непосредственно в БД:

SELECT * FROM messages WHERE id in (select coalesce(parent_id, message_id) from message_user mu join messages m on (mu.message_id = m.id) where mu.user_id = 171) or user_id = 171

Он очень быстро возвращает 204 результата.

Почему он требует До тех пор, пока объем и есть ли способ его рефакторинга?

Laravel 5.6

...