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 relevantes_campos que ocurran más de una vez. Esta consulta tarda milisegundos en ejecutarse.
Ahora, quería inspeccionar cada uno de los duplicados, por lo que pensé que podía SELECCIONAR cada fila en alguna_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 (lleva minutos). ¿Qué está pasando exactamente aquí para que sea tan lento? relevante_campo está indexado.
Eventualmente 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 hice mi segunda consulta como esta:
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 aquí que pueda explicar lo que está pasando?