Laten we eens iets anders proberen. Ik suggereer dit alleen als een "antwoord" vanwege de lengte en je kunt een opmerking niet opmaken. Laten we de query modulair benaderen als een reeks subsets die elkaar moeten doorsnijden. Laten we eens kijken hoe lang het duurt om elk van deze uit te voeren (gelieve te rapporteren). Vervang uw tijdstempels door t1 en t2. Merk op hoe elke zoekopdracht voortbouwt op de vorige, waardoor de vorige een "inline view" wordt.
EDIT:bevestig ook de kolommen in de tabel Netwerken.
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