Maison > base de données > tutoriel mysql > Clause JOIN ou WHERE pour le filtrage : quelle requête SQL est la plus rapide ?

Clause JOIN ou WHERE pour le filtrage : quelle requête SQL est la plus rapide ?

Susan Sarandon
Libérer: 2024-12-28 19:55:14
original
780 Les gens l'ont consulté

JOIN vs. WHERE Clause for Filtering: Which SQL Query is Faster?

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal