Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - SELECT WHERE campo IN (sottoquery) - Estremamente lento perché?

La sottoquery viene eseguita per ogni riga perché è una query correlata. È possibile trasformare una query correlata in una query non correlata selezionando tutto dalla sottoquery, in questo modo:

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

La query finale sarebbe simile a questa:

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
)