Hãy thử một cái gì đó khác nhau. Tôi chỉ đề xuất đây là "câu trả lời" vì độ dài của nó và bạn không thể định dạng nhận xét. Hãy tiếp cận truy vấn theo mô-đun như một loạt các tập con cần giao nhau. Hãy xem mất bao lâu để thực thi mỗi cái này (vui lòng báo cáo). Thay dấu thời gian của bạn cho t1 và t2. Lưu ý cách mỗi truy vấn xây dựng dựa trên truy vấn trước, làm cho truy vấn trước đó trở thành "chế độ xem nội tuyến".
CHỈNH SỬA:ngoài ra, vui lòng xác nhận các cột trong bảng Mạng.
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