Sie haben noch left join venues
übrig , aber Sie haben Bedingungen im where
Klausel über die verbundenen venues
Zeile, sodass nur verbundene Zeilen zurückgegeben werden. Dies ist jedoch ein Randproblem - lesen Sie weiter, warum Sie überhaupt keinen Join benötigen.
Als nächstes, wenn die Stadt vancouver
ist , es ist auch nicht nötig Test für Land oder Staat.
Wenn Sie schließlich herausfinden möchten, "wie viele zukünftige Veranstaltungen in Vancouver stattfinden", brauchen Sie keinen Join, da die Veranstaltungsort-ID eine Konstante ist!
Versuchen Sie Folgendes:
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
MySQL verwendet den Index auf venueid
ohne dass Sie einen Hinweis verwenden müssen. Wenn dies nicht der Fall ist, führen Sie Folgendes aus:
analyze events
wodurch die Statistik der Datenverteilung in den indizierten Spalten aktualisiert wird. Beachten Sie, dass es effizienter ist, nicht, wenn viele Ihrer Veranstaltungen in Vancouver stattfinden Verwenden Sie einen Index (da auf die meisten Zeilen sowieso zugegriffen werden muss).