Mari kita coba sesuatu yang berbeda. Saya hanya menyarankan ini sebagai "jawaban" karena panjangnya dan Anda tidak dapat memformat komentar. Mari kita dekati kueri secara modular sebagai rangkaian himpunan bagian yang perlu berpotongan. Mari kita lihat berapa lama waktu yang dibutuhkan masing-masing untuk mengeksekusi (harap laporkan). Ganti stempel waktu Anda untuk t1 dan t2. Perhatikan bagaimana setiap kueri dibangun di atas kueri sebelumnya, menjadikan kueri sebelumnya sebagai "tampilan sebaris".
EDIT:juga, harap konfirmasikan kolom di tabel Jaringan.
1
select PM.receiver_id from private_messages PM
where PM.create_at between (t1 and t2)
2
select U.id, U.network_id from users U
join
(
select PM.receiver_id from private_messages PM
where PM.create_at between (t1 and t2)
) as FOO
on U.id = FOO.receiver_id
3
select N.* from networks N
join
(
select U.id, U.network_id from users U
join
(
select PM.receiver_id from private_messages PM
where PM.create_at between (t1 and t2)
) as FOO
on U.id = FOO.receiver_id
) as BAR
on N.id = BAR.network_id