Ich habe ein paar Duplikate in einer Datenbank, die ich überprüfen möchte. Was ich also getan habe, um zu sehen, welche Duplikate sind, habe ich folgendermaßen gemacht:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Auf diese Weise werden alle Zeilen mit relevantem_Feld mehr als einmal angezeigt. Die Ausführung dieser Abfrage dauert Millisekunden.
Jetzt wollte ich jedes der Duplikate untersuchen, also dachte ich, ich könnte jede Zeile in einer Tabelle mit einem relevanten Feld in der obigen Abfrage AUSWÄHLEN, also gefiel mir Folgendes:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
Dies stellt sich aus irgendeinem Grund als äußerst langsam heraus (es dauert Minuten). Was genau ist hier los, um es so langsam zu machen? relevant_field ist indiziert.
Schließlich habe ich versucht, aus der ersten Abfrage eine Ansicht "temp_view" zu erstellen (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
und stattdessen meine zweite Abfrage wie folgt durchzuführen :
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
Und das funktioniert gut. MySQL erledigt dies in einigen Millisekunden.
Gibt es hier SQL-Experten, die erklären können, was los ist?