in

MySQL – SELECT WHERE field IN (subconsulta) – Extremadamente lento ¿por qué?

apple touch icon@2

Tengo un par de duplicados en una base de datos que quiero inspeccionar, así que lo que hice para ver cuáles son duplicados, hice esto:

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

De esta manera, obtendré todas las filas con campo relevante que ocurren más de una vez. Esta consulta tarda milisegundos en ejecutarse.

Ahora, quería inspeccionar cada uno de los duplicados, así que pensé que podría SELECCIONAR cada fila en una tabla con un campo relevante en la consulta anterior, así que me gustó esto:

SELECT *
FROM some_table 
WHERE relevant_field IN
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
)

Esto resulta ser extremadamente lento por alguna razón (toma minutos). ¿Qué está pasando exactamente aquí para hacerlo tan lento? relevante_field está indexado.

Finalmente intenté crear una vista «temp_view» desde la primera consulta (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1), y luego hacer mi segunda consulta como esta en su lugar:

SELECT *
FROM some_table
WHERE relevant_field IN
(
    SELECT relevant_field
    FROM temp_view
)

Y eso funciona bien. MySQL hace esto en algunos milisegundos.

¿Algún experto en SQL que pueda explicar lo que está pasando?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

docker file

Docker – Archivo

Xdx6S89ZtXAUBXNBYo9VsU 1200 80

Cyberpunk 2077 Skippy explicó: cómo funciona la peculiar pistola inteligente y qué debes hacer durante Machine Gun