Całkowicie nowe podejście. Twój where
stan jest na dwóch stołach, ale wydaje się to niepotrzebne.
Pierwsza zmiana to:
where a1_.id = 1136 or a1_.parent_id = 1136
Myślę, że struktura, którą chcesz, to skanowanie tabeli kategorii, a następnie pobieranie z tabeli ogłoszeń. Aby pomóc, możesz utworzyć indeks na advert(advert_category_id, created_date)
.
Kusiłoby mnie, aby napisać zapytanie, przesuwając where
klauzulę do podzapytania. Nie wiem, czy miałoby to wpływ na wydajność:
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;