Hay situaciones que requieren tener una consulta realmente grande uniendo varias tablas junto con sentencias de subselección para producir los resultados deseados.
Mi pregunta es, ¿deberíamos considerar el uso de múltiples consultas más pequeñas y llevar las operaciones lógicas a la capa de aplicación consultando la base de datos en más de una llamada o es mejor tenerlas todas a la vez?
Por ejemplo, considere la siguiente consulta:
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
¿Cuál es la mejor manera de hacerlo?