Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment améliorer cette requête MySQL en utilisant la jointure ?

Il vous reste left join venues , mais vous avez des conditions dans le where clause sur les venues joints ligne, donc seules les lignes jointes seront renvoyées. Cependant, c'est un problème secondaire - lisez la suite pour savoir pourquoi vous n'avez pas du tout besoin d'une jointure.

Ensuite, si la ville est vancouver , il n'est pas nécessaire de également test pour le pays ou l'état.

Enfin, si vous essayez de trouver "combien d'événements futurs auront lieu à Vancouver", vous n'avez pas besoin d'une jointure, car l'identifiant du lieu est une constante !

Essayez ceci :

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

Mysql utilisera l'index sur venueid sans que vous ayez à utiliser un indice. Si ce n'est pas le cas, exécutez ceci :

analyze events

qui mettra à jour les statistiques de la distribution des données dans les colonnes indexées. Notez que si beaucoup de vos événements ont lieu à Vancouver, il est plus efficace de ne pas utilisez un index (car la plupart des lignes devront être accessibles de toute façon).