Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - SELECT WHERE Feld IN (Unterabfrage) - Extrem langsam, warum?

Die Unterabfrage wird für jede Zeile ausgeführt, da es sich um eine korrelierte Abfrage handelt. Man kann eine korrelierte Abfrage in eine nicht korrelierte Abfrage verwandeln, indem man alles aus der Unterabfrage auswählt, etwa so:

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

Die letzte Abfrage würde wie folgt aussehen:

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
)