Ich habe große (> Mil-Zeilen) MySQL-Datenbank durch Duplikate durcheinander gebracht. Ich denke, es könnte 1/4 bis 1/2 der gesamten Datenbank sein, die mit ihnen gefüllt ist. Ich muss sie schnell loswerden (ich meine Abfrageausführungszeit). So sieht es aus:
id (index) | text1 | text2 | Die
Kombination aus text3 text1 und text2 sollte eindeutig sein. Wenn Duplikate vorhanden sind, sollte nur eine Kombination mit text3 NOT NULL übrig bleiben. Beispiel:
1 | abc | def | NULL
2 | abc | def | ghi
3 | abc | def | jkl
4 | aaa | bbb | NULL
5 | aaa | bbb | NULL
...wird:
1 | abc | def | ghi #(doesn't realy matter id:2 or id:3 survives)
2 | aaa | bbb | NULL #(if there's no NOT NULL text3, NULL will do)
Neue IDs sind alles kalt, sie hängen nicht von alten Tabellen-IDs ab.
Ich habe Dinge ausprobiert wie:
CREATE TABLE tmp SELECT text1, text2, text3
FROM my_tbl;
GROUP BY text1, text2;
DROP TABLE my_tbl;
ALTER TABLE tmp RENAME TO my_tbl;
Oder SELECT DISTINCT und andere Variationen.
Während sie an kleinen Datenbanken arbeiten, ist die Ausführungszeit für Abfragen bei mir einfach riesig (eigentlich nie bis zum Ende;> 20 Minuten)
Gibt es einen schnelleren Weg, das zu tun? Bitte helfen Sie mir, dieses Problem zu lösen.