Хитрый SQL-трюк, о котором мало кто знает: можно резко ускорить сложные фильтры, если вместо OR использовать UNION ALL - оптимизатор часто строит намного быстрее план выполнения.
Особенно это полезно, когда каждое условие может использовать свой индекс, а OR ломает весь индексный план. Подписывайся, больше фишек каждый день !
Медленно: OR ломает индексы
SELECT *
FROM users
WHERE status = 'active'
OR created_at > NOW() - INTERVAL '30 days';
-- Быстро: каждое условие использует свой индекс
SELECT * FROM users
WHERE status = 'active'
UNION ALL
SELECT * FROM users
WHERE created_at > NOW() - INTERVAL '30 days'
AND status <> 'active';
Видео: https://www.youtube.com/shorts/Irl3Ax6UePI