Zkusme něco jiného. Navrhuji to pouze jako "odpověď" kvůli jeho délce a nemůžete formátovat komentář. Přistupujme k dotazu modulárně jako k řadě podmnožin, které se potřebují protnout. Podívejme se, jak dlouho trvá provedení každého z nich (prosím nahlaste). Nahraďte svá časová razítka za t1 a t2. Všimněte si, jak každý dotaz staví na předchozím, takže předchozí je „vložený pohled“.
EDIT:také prosím potvrďte sloupce v tabulce Sítě.
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