Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - campo SELECT WHERE IN (subconsulta) - Extremamente lento por quê?


A subconsulta está sendo executada para cada linha porque é uma consulta correlacionada. Pode-se transformar uma consulta correlacionada em uma consulta não correlacionada selecionando tudo da subconsulta, assim:
SELECT * FROM
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
) AS subquery

A consulta final ficaria assim:
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
)