JOIN vs WHERE pour des performances de requête optimales
Lors de la récupération de données de plusieurs tables dans une base de données, il est courant d'utiliser soit un JOIN, soit Clause WHERE pour établir les relations entre eux. Cet article plonge dans le débat sur la question de savoir si une méthode est intrinsèquement plus rapide que l'autre.
La question :
Considérez les tables de base de données suivantes, représentant les documents et leurs statistiques associées. :
CREATE TABLE Document ( Id INT PRIMARY KEY, Name VARCHAR 255 ) CREATE TABLE DocumentStats ( Id INT PRIMARY KEY, DocumentId INT, -- this is a foreign key to table Document NbViews INT )
Pour récupérer une liste des documents ayant reçu plus de 500 vues, deux options de requête se posent :
SELECT * FROM Document, DocumentStats WHERE DocumentStats.Id = Document.Id AND DocumentStats.NbViews > 500
SELECT * FROM Document INNER JOIN DocumentStats ON Document.Id = DocumentStats.Id WHERE DocumentStats.NbViews > 500
La réponse :
Théoriquement, les deux requêtes devraient produire des résultats équivalents, car elles utilisent la même condition d'égalité pour établir la relation entre les tableaux. Les optimiseurs de bases de données modernes peuvent gérer efficacement les deux formats.
Cependant, certains moteurs de bases de données, tels que les anciennes versions de SQL Server, peuvent présenter des différences de performances dans des conditions spécifiques. Dans l'exemple fourni, un JOIN peut être préférable si les tailles des tables sont relativement grandes, car cela évite le besoin d'un produit cartésien entre les deux tables.
En revanche, une clause WHERE avec une égalité explicite La condition peut mieux fonctionner s'il existe un index unique sur la colonne DocumentStats.DocumentId.
Supplémentaire Considérations :
Il est toujours recommandé de tester les deux options de requête sur le système de base de données réel utilisé pour déterminer le plan d'exécution optimal. Différents moteurs de base de données et optimiseurs de requêtes peuvent se comporter différemment selon différents scénarios.
De plus, la sélection de JOIN sur WHERE peut également être influencée par des facteurs tels que la sélectivité des données, la structure de la table et la présence de conditions supplémentaires dans 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!