Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Champ SELECT WHERE IN (sous-requête) - Extrêmement lent pourquoi ?

La sous-requête est exécutée pour chaque ligne car il s'agit d'une requête corrélée. On peut faire d'une requête corrélée une requête non corrélée en sélectionnant tout dans la sous-requête, comme ceci :

SELECT * FROM
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
) AS subquery

La requête finale ressemblerait à 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
)