別のことを試してみましょう。私はこれを「答え」として提案しているだけです。その長さのため、コメントをフォーマットすることはできません。交差する必要のある一連のサブセットとして、モジュール式にクエリにアプローチしましょう。これらのそれぞれが実行されるのにかかる時間を見てみましょう(報告してください)。 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