Critères de filtre dans les requêtes SQL : clause de jointure ou clause Where
Lors de l'interrogation de données dans SQL, il existe deux approches courantes pour appliquer des critères de filtre : les critères de jointure et la clause Where. Les développeurs se demandent souvent quelle approche est la plus efficace.
La question :
Quelle requête SQL s'exécute plus rapidement : celle qui applique le filtre sur les critères de jointure ou sur la clause Where ?
Analyse :
Considérez deux requêtes :
Requête 1 (Filtre sur les critères de jointure) :
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1;
Requête 2 (Filtre sur la clause Where) :
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = 1 INNER JOIN TableB b ON x.TableBID = b.ID;
Performances Comparaison :
Empiriquement, les tests révèlent que la clause Where est légèrement plus rapide que les critères de jointure. Ceci est contre-intuitif car on pourrait s'attendre à ce que les critères de jointure réduisent l'ensemble de résultats plus tôt.
Cohérence logique :
Outre les performances, considérez la cohérence logique de chaque approche. L'utilisation de la clause Where garantit que l'opération reste valide même si la jointure est remplacée par une jointure gauche.
Approche recommandée :
Basée sur les performances et la cohérence logique, elle Il est généralement recommandé d'appliquer des critères de filtrage sur le champ Où Clause.
Exemple :
Considérons la requête suivante :
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID AND a.ID = 1 LEFT JOIN TableB b ON x.TableBID = b.ID;
Cette requête est logiquement valable et fonctionne aussi bien que la requête équivalente avec le filtre sur la Rejoindre Critères.
Conclusion :
Bien que les critères de jointure et la clause Where fonctionnent de manière similaire du point de vue des performances, la clause Where est logiquement plus cohérente et constitue donc l'approche privilégiée pour l'application. critères de filtrage dans les requêtes SQL.
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!