Jointure par virgule SQL et JOIN explicite : analyse des goulots d'étranglement des performances
Lors de l'écriture de requêtes de base de données, il est facile d'ignorer le mot-clé explicite JOIN et d'utiliser la syntaxe plus familière séparée par des virgules :
<code class="language-sql">SELECT a.someRow, b.someRow FROM tableA AS a, tableB AS b WHERE a.ID=b.ID AND b.ID= $someVar</code>
Au fur et à mesure que vous approfondissez les bases de SQL, vous rencontrerez peut-être une syntaxe JOIN explicite et vous demanderez si les requêtes séparées par des virgules que vous utilisiez précédemment ont causé des problèmes.
Risque de concaténation de virgules
Bien que la syntaxe de jointure par virgule soit fonctionnellement équivalente à INNER JOIN, dans certains cas courants, elle peut entraîner des problèmes de performances imprévus. Prenons l'exemple suivant :
<code class="language-sql">SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'</code>
Dans cette requête, la base de données calculera le produit cartésien des tables personnes et entreprises avant d'appliquer le filtre. Ce produit cartésien sans contrainte n'existe qu'en mémoire et est de courte durée, mais son calcul peut prendre beaucoup de temps.
Meilleure approche : JOIN explicite
Une approche plus efficace consiste à utiliser le mot-clé JOIN pour regrouper les contraintes avec un JOIN :
<code class="language-sql">SELECT * FROM people p JOIN companies c ON p.companyID = c.id WHERE p.firstName = 'Daniel'</code>
Cette approche permet à la base de données de calculer directement des JOIN entièrement contraintes, évitant ainsi les calculs de produits cartésiens inutiles.
Résumé
Bien qu'il n'y ait rien de mal en soi avec les jointures par virgules, il est généralement recommandé d'utiliser une syntaxe JOIN explicite. Non seulement cela rend le code plus facile à lire et à maintenir, mais cela peut également améliorer les performances dans certains cas. En utilisant le mot-clé JOIN, vous pouvez optimiser vos requêtes SQL et garantir qu'elles s'exécutent aussi efficacement que possible.
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!