Eu tenho algumas duplicatas em um banco de dados que quero inspecionar. Portanto, o que fiz para ver quais são duplicadas, fiz o seguinte:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Dessa forma, vou obter todas as linhas com relevantes_field ocorrendo mais de uma vez. Essa consulta leva milissegundos para executar.
Agora, eu queria inspecionar cada uma das duplicatas, então pensei em selecionar cada linha em alguma tabela com um campo relevante na consulta acima, então fiz o seguinte:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
Isso acaba sendo extremamente lento por algum motivo (leva minutos). O que exatamente está acontecendo aqui para torná-lo tão lento? relevantes_campo é indexado.
Eventualmente, tentei criar uma visualização "temp_view" a partir da primeira consulta (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
e, em seguida, fazer minha segunda consulta como esta:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
E isso funciona muito bem. O MySQL faz isso em alguns milissegundos.
Algum especialista em SQL aqui que pode explicar o que está acontecendo?