Có những tình huống đòi hỏi phải có truy vấn thực sự lớn, kết hợp nhiều bảng cùng với các câu lệnh chọn phụ trong đó để tạo ra kết quả mong muốn.
Câu hỏi của tôi là, chúng ta có nên xem xét sử dụng nhiều truy vấn nhỏ hơn và đưa các hoạt động logic vào lớp ứng dụng bằng cách truy vấn DB trong nhiều cuộc gọi hay tốt hơn là nên thực hiện tất cả chúng trong một lần?
Ví dụ, hãy xem xét các truy vấn sau:
SELECT *
FROM `users`
WHERE `user_id` IN (SELECT f2.`friend_user_id`
FROM `friends` AS f1
INNER JOIN `friends` AS f2
ON f1.`friend_user_id` = f2.`user_id`
WHERE f2.`is_page` = 0
AND f1.`user_id` = "%1$d"
AND f2.`friend_user_id` != "%1$d"
AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id`
FROM `friends`
WHERE `user_id` = "%1$d"))
AND `user_id` NOT IN (SELECT `user_id`
FROM `friend_requests`
WHERE `friend_user_id` = "%1$d")
AND `user_image` IS NOT NULL
ORDER BY RAND()
LIMIT %2$d
Cách tốt nhất để làm điều đó là gì?