Optimierung der Löschung doppelter Zeilen in der SQLite-Datenbank
Frage:
Sie stoßen auf eine riesige Tabelle mit über 36 Millionen Zeilen in SQLite3 die Herausforderung, doppelte Datensätze basierend auf zwei Spalten (Hash und d) zu entfernen. Es gibt jedoch einen Haken: In der Tabelle ist keine Primärschlüsselspalte vorhanden. Auf der Suche nach einer effizienten Lösung erkundigen Sie sich nach dem effektivsten Ansatz zur Bewältigung dieser Aufgabe.
Antwort:
Um doppelte Zeilen ohne Primärschlüssel effektiv zu eliminieren, ist für jeden Datensatz eine eindeutige Kennung erforderlich.
Lösung:
Nutzen Sie die spezielle Rowid-Spalte von SQLite3 als unsere eindeutige Kennung. Die Spalte „rowid“ ist eine Ganzzahl, die automatisch für jede neue Zeile erhöht wird, die der Tabelle hinzugefügt wird. Mit rowid können Sie den Datensatz mit dem niedrigsten rowid-Wert für jede (Hash, d)-Kombination beibehalten.
SQL-Abfrage:
Implementieren Sie die folgende SQL-Abfrage, um Ihr Ziel zu erreichen:
DELETE FROM YourTable WHERE rowid NOT IN ( SELECT MIN(rowid) FROM YourTable GROUP BY hash, d )
Diese Abfrage identifiziert und eliminiert alle Zeilen mit doppelten (Hash, d)-Kombinationen und stellt sicher, dass nur eine Instanz jeder Kombination in der verbleibt Tisch. Die Unterabfrage MIN(rowid) stellt sicher, dass bei doppelten Datensätzen der Datensatz mit dem niedrigsten Rowid-Wert beibehalten wird.
Das obige ist der detaillierte Inhalt vonWie lösche ich effizient doppelte Zeilen in einer großen SQLite-Tabelle ohne Primärschlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!