Réduire le nombre de jointures pour optimiser les performances des requêtes
Dans l'optimisation des bases de données, minimiser les opérations de jointure est crucial pour améliorer la vitesse des requêtes. Ce principe veut que chaque jointure multiplie le coût de la requête plutôt que de simplement l'augmenter. Pour illustrer ce concept, examinons un problème spécifique et explorons une solution alternative qui utilise moins de jointures.
Requête pour compter les résultats des jointures
Envisagez un scénario dans lequel vous avez besoin pour compter le nombre de lignes résultant de trois jointures distinctes :
Généralement, l'approche simple impliquerait trois sous-requêtes, chacune effectuant une jointure et un décompte :
-- Subquery 1 SELECT COUNT(*) FROM album alb LEFT JOIN pays_album payalb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" -- Subquery 2 SELECT COUNT(*) FROM album alb LEFT JOIN pers_album peralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" -- Subquery 3 SELECT COUNT(*) FROM album alb LEFT JOIN juron_album juralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
Cependant, il est possible d'obtenir le même résultat avec un seul requête :
SELECT alb.titreAlb AS "Titre", COUNT(DISTINCT payalb.idAlb, payalb.PrimaryKeyFields) AS "Pays", COUNT(DISTINCT peralb.idAlb, peralb.PrimaryKeyFields) AS "Personnages", COUNT(DISTINCT juralb.idAlb, juralb.PrimaryKeyFields) AS "Jurons" FROM album alb LEFT JOIN pays_album payalb USING ( idAlb ) LEFT JOIN pers_album peralb USING ( idAlb ) LEFT JOIN juron_album juralb USING ( idAlb ) WHERE alb.titreAlb = "LES CIGARES DU PHARAON" GROUP BY alb.titreAlb
En utilisant le mot-clé DISTINCT, l'effet des jointures supplémentaires sur le nombre est annulé. Cette approche imite efficacement la notion originale de minimisation des jointures, même si son avantage en termes de performances dépend de la disponibilité optimale de l'index. Néanmoins, il constitue une alternative viable qui mérite d’être considérée.
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!