Это моя структура таблицы:
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