ich derzeit Daten aus Legacy-System migrieren bin auf das aktuelle System.Legen Sie in Select-Anweisung auf derselben Tabelle
Ich habe diese INSERT
Anweisung innerhalb einer gespeicherten Prozedur.
INSERT INTO TABLE_1
(PRIMARY_ID, SEQUENCE_ID, DESCR)
SELECT LEGACY_ID PRIMARY_ID
, (SELECT COUNT(*) + 1
FROM TABLE_1 T1
WHERE T1.PRIMARY_ID = L1.LEGACY_ID) SEQUENCE_ID
, L1.DESCR
FROM LEGACY_TABLE L1;
Jedes Mal, wenn ich mehrere Werte von LEGACY_ID
von LEGACY_TABLE
haben, die Abfrage für die SEQUENCE_ID
nicht erhöhen nicht.
Warum ist das so? Ich kann anscheinend keine Dokumentation darüber finden, wie die INSERT INTO SELECT
-Anweisung hinter den Kulissen funktioniert. Ich nehme an, dass es alle Werte aus der Tabelle auswählt, die Sie auswählen, und fügt sie dann gleichzeitig ein, deshalb erhöht es den COUNT(*)
Wert nicht?
Welche anderen Abhilfen kann ich tun? Ich kann keine SEQUENCE
erstellen, da die SEQUENCE_ID
auf der Anzahl der vorhandenen PRIMARY_ID
basieren muss. Sie sind beide primäre IDs.
Vielen Dank im Voraus.
Gibt es keine andere Möglichkeit? Ich muss das Einfügen in die Tabelle optimieren, da ich mehr als 50 Millionen Datensätze einfügen muss. –
Dies ist kein "schlechter" Weg. Aber einfach für dich zu pflegen. Wir können 'COMMIT' in Chargen einführen. Wenn Sie einen Index für 'PRIMARY ID' von' TABLE1' haben, wird dieser Block mit minimalen Ressourcen gut funktionieren. –
Ich habe Indizes für 'TABLE1'' PRIMARY ID'. Für diese Tabelle sind die Primärschlüssel jedoch "PRIMARY_ID" und "SEQUENCE_ID". Außerdem muss ich andere Felder in 'LEGACY_TABLE' in andere Tabellen wie' TABLE2' und 'TABLE3' einfügen. –