sql >> Databasteknik >  >> RDS >> Mysql

Hur förbättrar man denna MySQL-fråga med join?

Du har left join venues , men du har villkor i where klausul om de förenade venues rad, så endast sammanfogade rader kommer att returneras. Det är dock en sidofråga - läs vidare för varför du inte behöver gå med alls.

Nästa, om staden är vancouver , det finns inget behov av att också testa för land eller stat.

Slutligen, om du försöker hitta "hur många framtida evenemang är det i Vancouver", behöver du inte gå med, eftersom platsens ID är konstant!

Prova detta:

select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate() 
and te_id != 0

Mysql kommer att använda indexet på venueid utan att du behöver använda en ledtråd. Om det inte gör det, kör detta:

analyze events

som kommer att uppdatera statistiken för datafördelningen i de indexerade kolumnerna. Observera att om många av dina evenemang är i Vancouver är det mer effektivt att inte använd ett index (eftersom de flesta raderna måste nås ändå).



  1. MySQL arbetsbänk tabell data import guiden extremt långsam

  2. Hur QUOTE() fungerar i MariaDB

  3. Utlöser endast om ett villkor är uppfyllt i SQL Server

  4. SAP Lumira och JDBC-ODBC Bridge