Нека опитаме нещо различно. Предлагам това само като „отговор“ поради дължината му и не можете да форматирате коментар. Нека подходим към заявката модулно като поредица от подгрупи, които трябва да бъдат пресечени. Нека да видим колко време отнема всяко от тях за изпълнение (моля, докладвайте). Заменете вашите времеви клейма за t1 и t2. Обърнете внимание как всяка заявка се основава на предишната, правейки предишната "вграден изглед".
РЕДАКТИРАНЕ:също така, моля, потвърдете колоните в таблицата с мрежи.
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