Ich muss 100 Millionen Datensätze in einer einzelnen Tabelle aktualisieren, um die Tabelle zu normalisieren, indem der varchar-Wert einer Spalte einfach durch eine ID ersetzt wird. (Ich sage "Ersetzen", aber ich schreibe die ID wirklich in eine andere Spalte.)
Ich versuche, den Datensatz zu normalisieren. Die noch nicht normalisierten Daten haben keine Indizierung. Mein Gedanke war, dass ich keine Indizes für die Rohwerte erstellen und warten würde, sondern stattdessen die Fremdschlüssel indizieren würde, die die varchar-Werte nach Abschluss der Aktualisierung durch tinyint-Werte ersetzen.
UPDATE A
SET A.AutoClassID = B.AutoClassID
FROM AutoDataImportStaging.dbo.Automobile as A
JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName)
Hintergrund
- Verwenden von MSSQL 2008 R2 auf Server 2008 R2
- Server hat 8 GB RAM
- Server hat ein RAID10, 7200 U / min SATA (nicht großartig, ich weiß, in der Produktion werden nur Daten gelesen und keine Daten geschrieben; plus der jüngste HD-Mangel machte dies aus Kostengründen notwendig)
- Der Server verfügt über eine Dual-Quad-Core-Xeon-CPU
- Die Maschine macht nichts anderes (derzeit nur für Entwickler, nur für diesen Prozess).
- einfache Protokollierung aktiviert (? - aber wird immer noch protokolliert, damit ein Rollback durchgeführt werden kann?)
- Beachten Sie, dass die Abfrage auf zwei verschiedene DBs verweist, was das wert ist
- "Breite" eines Datensatzes in der Tabelle, der aktualisiert wird, beträgt 455 Bytes
Ressourcen während der Ausführung
- Der physische Arbeitsspeicher ist voll
- Die Festplatten-E / A ist maximal
- CPU macht kaum etwas (Choke-Punkt ist I / O)
- Die Laufzeit betrug 14 Stunden und es wird gezählt!
Ich vermute ein paar Dinge, wie ich einen Index für die Rohdaten benötige, obwohl ich die Spalte (AutoClassName) nach den Normalisierungsaktualisierungen löschen werde. Ich frage mich auch, ob ich anstelle des JOIN nur einen Datensatz nach dem anderen durchgehen sollte, was zu dem Zeitpunkt, als ich damit anfing, lächerlich schien, aber jetzt scheint es, dass das schneller gewesen wäre.
Wie kann ich meine Methodik für meine verbleibenden Normalisierungsaktualisierungen (ähnlich wie diese) schneller ändern?
TOP
Klausel einverstanden . Das wäre mein Ansatz.