Masz left join venues
, ale masz warunki w where
klauzula na połączonych venues
wiersz, więc zostaną zwrócone tylko połączone wiersze. Jest to jednak kwestia poboczna — przeczytaj, dlaczego w ogóle nie potrzebujesz dołączania.
Następnie, jeśli miasto to vancouver
, nie ma potrzeby również test dla kraju lub stanu.
Wreszcie, jeśli próbujesz dowiedzieć się „ile przyszłych wydarzeń odbędzie się w Vancouver”, nie potrzebujesz dołączania, ponieważ identyfikator miejsca jest stały!
Spróbuj tego:
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
Mysql użyje indeksu na venueid
bez konieczności używania podpowiedzi. Jeśli nie, wykonaj to:
analyze events
który zaktualizuje statystyki dystrybucji danych w indeksowanych kolumnach. Pamiętaj, że jeśli wiele Twoich wydarzeń odbywa się w Vancouver, lepiej nie użyj indeksu (ponieważ i tak trzeba będzie uzyskać dostęp do większości wierszy).