Maison >base de données >tutoriel mysql >Clause WHERE ou ON dans les requêtes JOIN : quand dois-je utiliser laquelle pour des performances optimales ?
Clause WHERE vs ON dans la requête JOIN : implications en termes de performances
Lors de l'utilisation de requêtes JOIN dans T-SQL, il est courant de rencontrer le choix entre placer les conditions de filtrage dans la clause WHERE ou la clause ON. Bien que les deux approches puissent produire le même ensemble de résultats, il existe de subtiles différences de performances à prendre en compte.
Plus précisément, examinons la requête suivante :
SELECT * FROM Foo f INNER JOIN Bar b ON (b.BarId = f.BarId); WHERE b.IsApproved = 1;
Par rapport à :
SELECT * FROM Foo f INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Les deux requêtes renvoient des ensembles de lignes identiques, mais les caractéristiques de performances diffèrent.
En général, placer des filtres dans la clause ON est préféré pour les raisons suivantes :
Cependant, il existe des cas où placer des filtres dans la clause WHERE est nécessaire :
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
Conclusion :
Lorsque les performances sont un problème, envisagez de placer conditions de filtrage dans la clause ON pour optimiser les opérations de jointure et réduire la taille du jeu de résultats. Pour les jointures externes ou le filtrage OPTIONNEL, la clause WHERE doit être utilisée pour obtenir le filtrage souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!