Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man diese MySQL-Abfrage mit Join verbessern?

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).