Abordagem inteiramente nova. Seu
where
condição está em duas tabelas, mas isso parece desnecessário. A primeira mudança seria:
where a1_.id = 1136 or a1_.parent_id = 1136
Acho que a estrutura que você deseja é uma varredura na tabela de categorias e, em seguida, busca na tabela de anúncios. Para ajudar, você pode criar um índice em
advert(advert_category_id, created_date)
. Eu ficaria tentado a escrever a consulta movendo o
where
cláusula em uma subconsulta. Não sei se isso afetaria o desempenho:SELECT a0_.id AS id0
FROM advert a0_ INNER JOIN
(select ac.*
from advertcategory ac
where ac.id = 1136 or ac.parent_id = 1136
) ac
ON a0_.advert_category_id = ac.id
ORDER BY a0_.created_date DESC
LIMIT 15;