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;
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;
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 :
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;
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;
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!