Maison > base de données > tutoriel mysql > Une clause WHERE ou un filtre de critères de jointure sont-ils plus rapides dans les requêtes SQL ?

Une clause WHERE ou un filtre de critères de jointure sont-ils plus rapides dans les requêtes SQL ?

Barbara Streisand
Libérer: 2025-01-01 02:26:09
original
449 Les gens l'ont consulté

Is a WHERE Clause or Join Criteria Filter Faster in SQL Queries?

Quelle requête SQL est la plus rapide : critères de jointure ou clause Where ?

Cette question compare les performances de deux structures de requête : filtrage sur la jointure critères plutôt que d’utiliser la clause WHERE. L'hypothèse courante est que le filtrage sur les critères de jointure est plus rapide car il réduit l'ensemble de résultats plus tôt, mais cette croyance n'est pas toujours vraie.

Comparaison des requêtes

Voyons examiner deux requêtes avec des structures identiques à l'exception du placement du filtre :

Requête 1 (Filtre lors de la jointure Critères)

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 dans la clause WHERE)

SELECT *
FROM TableA a
INNER JOIN TableXRef x ON a.ID = x.TableAID
INNER JOIN TableB b ON x.TableBID = b.ID
AND a.ID = 1;
Copier après la connexion

Tests de performances

Pour déterminer quelle requête est la plus rapide, des tests de performances ont été effectués. Les résultats ont révélé que le filtrage sur la clause WHERE était légèrement plus rapide que l'utilisation des critères de jointure. La différence de temps écoulé était minime :

  • Clause WHERE : 143016 ms
  • Critères de jointure : 143256 ms

Logique Cohérence

Bien que la performance soit une considération importante, la cohérence logique est tout aussi cruciale. Le filtrage sur la clause WHERE s'aligne sur la sémantique des jointures gauches. Considérez les requêtes suivantes :

Jointure à gauche avec filtre sur les critères de jointure

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

Jointure à gauche avec filtre dans la clause WHERE

SELECT *
FROM TableA a
LEFT JOIN TableXRef x ON x.TableAID = a.ID
LEFT JOIN TableB b ON b.id = x.TableBID
WHERE a.id = 1;
Copier après la connexion

Dans le cas de jointures à gauche, le filtre de clause WHERE garantit que seules les lignes correspondantes sont renvoyées pour un ID donné, que ce soit les jointures du côté droit sont présentes ou non. Ce comportement est logiquement cohérent et plus facile à comprendre.

Conclusion

Bien que la différence de performances soit négligeable, le filtrage sur la clause WHERE est légèrement plus rapide et plus logiquement cohérent, en particulier lorsque vous travaillez avec des jointures à gauche. Par conséquent, il est généralement recommandé de placer des filtres dans la clause WHERE pour des raisons de performances et de lisibilité.

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