Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête MySQL dans une clause IN entraîne-t-elle des problèmes de performances ?

Pourquoi ma sous-requête MySQL dans une clause IN entraîne-t-elle des problèmes de performances ?

Mary-Kate Olsen
Libérer: 2024-11-29 05:22:25
original
667 Les gens l'ont consulté

Why is my MySQL subquery in an IN clause causing performance issues?

MySQL - La corrélation de sous-requête ralentit les performances de la clause IN

La requête donnée, qui identifie les lignes en double dans une table de base de données à l'aide d'une sous-requête dans le La clause IN rencontre des problèmes de performances importants. Bien que la sous-requête elle-même s'exécute rapidement, la requête de la clause IN prend considérablement plus de temps.

Raison de la lenteur

Le ralentissement est causé par la nature corrélée de la sous-requête. Dans une requête corrélée, la sous-requête fait référence aux colonnes de la requête externe, ce qui la rend dépendante de l'exécution de la requête externe. Par conséquent, chaque ligne de la table externe déclenche une exécution distincte de la sous-requête.

Solution

Pour résoudre le problème, la sous-requête corrélée peut être convertie en une sous-requête non corrélée en sélectionnant toutes les colonnes qu'elle contient. Cela élimine la dépendance à l'égard de la requête externe, améliorant considérablement les performances :

SELECT * FROM
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
) AS subquery
Copier après la connexion

Requête finale

La requête modifiée ressemblera à ceci :

SELECT *
FROM some_table
WHERE relevant_field IN
(
    SELECT * FROM
    (
        SELECT relevant_field
        FROM some_table
        GROUP BY relevant_field
        HAVING COUNT(*) > 1
    ) AS subquery
)
Copier après la connexion

Cette requête non corrélée s'exécutera beaucoup plus rapidement que la requête corrélée d'origine.

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