sql >> Base de Datos >  >> RDS >> Mysql

MySQL - SELECCIONE DONDE el campo EN (subconsulta) - Extremadamente lento, ¿por qué?

La subconsulta se ejecuta para cada fila porque es una consulta correlacionada. Se puede convertir una consulta correlacionada en una consulta no correlacionada seleccionando todo de la subconsulta, así:

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

La consulta final se vería así:

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
)