Maison > base de données > tutoriel mysql > Comment pouvons-nous optimiser les performances des requêtes en réduisant le nombre de jointures ?

Comment pouvons-nous optimiser les performances des requêtes en réduisant le nombre de jointures ?

Barbara Streisand
Libérer: 2024-12-08 21:40:11
original
291 Les gens l'ont consulté

How Can We Optimize Query Performance by Reducing Join Count?

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 :

  • album à pays_album
  • album vers pers_album
  • album vers juron_album

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"
Copier après la connexion

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
Copier après la connexion

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!

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