Klaus Mock: MySQL mit 6,2 Mio. Datensätzen

Beitrag lesen

Hallo,

Du könntest aletrnatib auch mit

SELECT MAX(id)
    FROM tabelle
   GROUP BY name
  HAVING count(1) >1


> > ...  
  

> Habe ich schon einmal versucht. Habe die einzelnen IDs dann in einen String geschrieben und als Löschkriterium genutzt. Folge war wieder ein Speicherproblem. Die gleichen Datensätze sind einmal, zweimal etc. mehrfach vorhanden.  
  
1\.) Wenn Deine Datenbank es kann, dann kannst Du auch mit einem Subselect bei der lösch-Anweisung arbeiten  
~~~sql
  
   DELETE FROM tabelle  
    WHERE id IN ( .. hier das andere Select Statement rein ...)  

Wenn dabei die Datenbank überforder wird dann  weiter mit

2.) Es gibt immer noch die Möglichkeit z.B. mittels Einsatz von LIMIT() die Menge der gefunden Dubletten pro Durchlauf einzuschränken. Das bedeutet zwar mehrere Durchläufe, aber letztendlich sollte es dann doch irgendwann erledigt sein.

Und um das in Zukunft zu vermeiden solltest Du dringen den hier mehrfach gemachten Vorschlag umsetzen, einen UNIQUE-Constraint zu setzen. dann kommen keine Dubletten mehr in die Dtaenbank. Was übrigens auch eine gute Idee ist, das in künftigen Projekt von anfang an gelich einzubauen.

Grüße
  Klaus