Я бы добавил часть ORDER BY post_date DESC LIMIT 3
во все подзапросы.таким образом, все подзапросы будут использовать индекс поля post_date
соответствующей таблицы, а основной запрос должен будет отсортировать только строки 18x3.
Если у вас есть только этот основной запрос, он должен будет извлечь все (тысячи? Миллионы?) Строк и затем отсортировать.Я не уверен, что оптимизатор достаточно умен, чтобы этого не делать:
( SELECT post_name, post_type, post_status, post_date, 'ara' AS source
FROM ara_posts
WHERE post_status='publish'
AND post_type='post'
ORDER BY post_date DESC
LIMIT 3
)
UNION ALL
( SELECT post_name, post_type, post_status, post_date, 'val' AS source
FROM val_posts
WHERE post_status='publish'
AND post_type='post'
ORDER BY post_date DESC
LIMIT 3
)
UNION ALL
(...)
ORDER BY post_date DESC
LIMIT 3
И Денис очень хорошо знает, как определить источник конечных результатов.