Realmente é necessario fazer isto com o union?
minha sugestão:
SELECT ID ,post_name ,post_update FROM wp_posts INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_posts.ID WHERE wp_term_relationships.term_taxonomy_id IN ('254', '112') AND wp_posts.ID != '10768' AND wp_posts.post_status = 'publish' AND wp_posts.linguagem != 'en' ORDER BY RAND() LIMIT 8;
Provavelmente essa consulta que fiz tera melhor desempenho porque em comparação com a primeira consulta, utilizei operador "IN" ao invés de várias cláusulas "UNION ALL". Além disso, a clausa where roda somente uma vez, em vez de rodar tres vezes.
@Marilzon Acabei descobrindo que o que estava pensando na minha consulta era o último rand(), pois minha tabela tem mais de 100.000 linhas
mas mesmo com rand(), sua consulta processou em 0.0064s o que já é incrivel, Mas não está retornando do mesmo jeito do código original
(Editado) E testando mais a fundo no SLQ do Banco de dados, percebi que todos os posts da consulta tem relação com a categoria e com as tags, por isso que ficou leve a consulta. Pois ele não está buscando os posts aleatórios como na consulta original.
Eu preciso que ele retorne 2 posts que tenha relação a tag ("254") se existir e 2 posts que tenha relação a categoria ("112") se existir E depois gere o restante aleatóriamente em no máximo 8 resultados ao todo.
Existe outra forma de gerar valores aleatórios sem usar o rand()?