Используй EXISTS вместо IN на больших таблицах
-- медленнее
SELECT *
FROM orders o
WHERE o.user_id IN (SELECT id FROM users WHERE active = true);
-- быстрее
SELECT *
FROM orders o
WHERE EXISTS (
SELECT 1
FROM users u
WHERE u.id = o.user_id AND u.active = true
);
EXISTS останавливается на первом совпадении и не тянет весь подзапрос в память. На больших данных разница может быть кратной.
-- медленнее
SELECT *
FROM orders o
WHERE o.user_id IN (SELECT id FROM users WHERE active = true);
-- быстрее
SELECT *
FROM orders o
WHERE EXISTS (
SELECT 1
FROM users u
WHERE u.id = o.user_id AND u.active = true
);
EXISTS останавливается на первом совпадении и не тянет весь подзапрос в память. На больших данных разница может быть кратной.