Quelle requête SQL est la plus rapide : critères de jointure ou filtre de clause Where ?
Question originale :
Quelle approche est la plus efficace : filtrer sur les critères de jointure ou dans le WHERE clause ?
Analyse des performances :
Contrairement à la croyance populaire, les tests ont révélé que le filtre de la clause WHERE est légèrement plus rapide que le filtre des critères de jointure. La différence de performances est cependant insignifiante.
Plans d'exécution des requêtes :
Les deux structures de requête aboutissent à des plans d'exécution identiques, car elles produisent le même ensemble de résultats filtrés.
Cohérence logique :
D'un point de vue logique, il est préférable d'appliquer le filtre à la clause WHERE, car cela a toujours du sens lorsque l'INNER JOIN est remplacé par un LEFT JOIN :
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID LEFT JOIN TableB b ON x.TableBID = b.ID WHERE a.id = 1
Cette requête ne renverra que les enregistrements où a.id vaut 1, quel que soit le type JOIN. Par conséquent, le filtre de clause WHERE est plus logiquement cohérent dans les scénarios où une évaluation paresseuse est requise.
Conclusion :
Bien qu'il y ait un léger avantage en termes de performances à utiliser la clause WHERE filtre, le choix entre les deux approches doit avant tout tenir compte de la cohérence logique et de la lisibilité du code.
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!