Maison >base de données >tutoriel mysql >Filtrage de clause JOIN ou WHERE : quelle approche SQL offre de meilleures performances ?

Filtrage de clause JOIN ou WHERE : quelle approche SQL offre de meilleures performances ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-03 07:10:39195parcourir

JOIN vs. WHERE Clause Filtering: Which SQL Approach Offers Better Performance?

Performances du filtre : critères de jointure par rapport à la clause WHERE

Lors de l'exécution de requêtes SQL, il est courant de filtrer les données en utilisant à la fois les critères de jointure et le Clause OÙ. Cependant, la question se pose : quelle approche offre de meilleures performances ?

Considérez les deux requêtes suivantes :

Requête 1 (Filtre à la 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 OÙ)

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

Intuitivement, beaucoup supposent que le filtrage sur les critères de jointure (requête 1) est plus rapide car il réduit le résultat défini plus tôt. Cependant, les tests empiriques révèlent un résultat surprenant.

Résultats de performances

Après avoir exécuté des tests avec un ensemble de données de 1 000 enregistrements dans chaque table, les résultats ont montré que la requête 2 (filtrage sur la clause WHERE) était en fait légèrement plus rapide :

Filter Technique Elapsed Time (ms)
Join Criteria (Query 1) 143256
WHERE Clause (Query 2) 143016

Logique Considérations

Bien que les performances soient proches entre les deux approches, il existe des arguments logiques en faveur de l'utilisation de la clause WHERE pour le filtrage :

  • Si vous avez remplacé les INNER JOIN par LEFT JOINs, le filtre sur les critères de jointure n'aurait plus de sens logiquement.
  • L'utilisation de la clause WHERE garantit que le filtre s'applique à toutes les lignes de l'ensemble de résultats, quel que soit le type de jointure utilisé.

Conclusion

Bien que les deux techniques de filtrage fonctionnent de manière similaire, l'application du filtre dans le La clause WHERE est légèrement plus rapide et plus logiquement cohérente. Cette technique offre les mêmes performances et garantit la clarté de la requête.

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!

Déclaration:
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