MySQL – SELECT WHERE field IN (subquery) – Estremamente lento perché?

Ho un paio di duplicati in un database che voglio ispezionare, quindi quello che ho fatto per vedere quali sono i duplicati, l’ho fatto:

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

In questo modo, otterrò tutte le righe con rilevante_field che si verificano più di una volta. Questa query richiede millisecondi per essere eseguita.

Ora, volevo ispezionare ognuno dei duplicati, quindi ho pensato di poter selezionare ogni riga in some_table con un campo pertinente nella query precedente, quindi mi è piaciuto così:

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

Questo risulta essere estremamente lento per qualche motivo (ci vogliono alcuni minuti). Cosa sta succedendo esattamente qui per renderlo così lento? relevant_field è indicizzato.

Alla fine ho provato a creare una vista “temp_view” dalla prima query (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1) , e quindi fare la mia seconda query come questa invece:

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

E questo funziona bene. MySQL esegue questo in alcuni millisecondi.

Qualche esperto SQL qui che può spiegare cosa sta succedendo?