"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Sous-questionnées vs jointures: Pourquoi le remplacement d'une sous-requête par un jointure a-t-il abouti à une amélioration des performances de 100x?

Sous-questionnées vs jointures: Pourquoi le remplacement d'une sous-requête par un jointure a-t-il abouti à une amélioration des performances de 100x?

Publié le 2025-03-24
Parcourir:362

Subqueries vs. Joins: Why Did Replacing a Subquery with a Join Result in a 100x Performance Improvement?

Optimisation de la requête: l'impact dramatique du remplacement des sous-requêtes par des jointures

Une application récente refactoring a considérablement amélioré les performances en remplaçant une sous-requête par une jointure intérieure. Le code d'origine a utilisé une sous-requête dans la clause :

WHERE id IN (SELECT id FROM ...)

Le changement a entraîné une étonnante accélération de 100x, passant le temps d'exécution de 50 secondes à 0,3 seconde. Cela soulève la question: pourquoi une telle différence massive?

La clé réside dans la compréhension du comportement de sous-requête. Une sous-requête corrélée - où la clause de la sous-requête dépend des valeurs de la requête extérieure - s'exécute à plusieurs reprises pour chaque ligne de la requête extérieure. Cette exécution répétée est extrêmement inefficace. En revanche, une sous-requête non corrélée ne s'exécute qu'une seule fois.

La sous-requête originale a été corrélée. Pour chaque ligne traitée, la base de données devait exécuter la sous-requête, conduisant à de nombreuses recherches.

Le remplacement de la sous-requête par une jointure intérieure a permis à la base de données de tirer parti des recherches d'index efficacement. La condition de jointure (par exemple, soumission_id = st_tag_id ) a autorisé une seule recherche indexée par ligne de qualification. Cela a considérablement réduit les accès de la base de données, expliquant le saut de performances.

la leçon? Un examen attentif des sous-questionnaires en fonction des jointures est vital pour l'optimisation des requêtes SQL. Comprendre les sous-requêtes corrélées et non corrélées, et leurs implications de performance, permet aux développeurs d'écrire des requêtes de base de données beaucoup plus rapides et plus efficaces.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3