Approche entièrement nouvelle. Votre where
la condition est sur deux tables, mais cela semble inutile.
Le premier changement serait :
where a1_.id = 1136 or a1_.parent_id = 1136
Je pense que la structure que vous souhaitez est une analyse de la table des catégories, puis extraite de la table des annonces. Pour vous aider, vous pouvez créer un index sur advert(advert_category_id, created_date)
.
Je serais tenté d'écrire la requête en déplaçant le where
clause dans une sous-requête. Je ne sais pas si cela affecterait les performances :
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;