Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Der schnellste Weg, eine Million Zeilen in Oracle einzufügen

Ihr Ansatz wird zu Gedächtnisproblemen führen. Der schnellste Weg ist dieser [Abfrage nach Davids Kommentar bearbeitet, um sich um das Nullszenario zu kümmern] :

insert into dtr_debtors1(SSN)
select a.S1+level
   from dual,(select nvl(max(ssn),0) S1 from dtr_debtors1) a
connect by level <= 10000 

Eine ausgewählte Einfügung ist der schnellste Ansatz, da alles im RAM bleibt. Diese Abfrage kann langsam werden, wenn sie in den globalen Temp-Bereich rutscht, aber dann muss die DB optimiert werden. Ich glaube nicht, dass es etwas schnelleres geben kann.

Noch ein paar Details zur Speichernutzung durch Query:

Jede Abfrage hat ihren eigenen PGA [Program Global Area], bei dem es sich im Grunde um RAM handelt, das jeder Abfrage zur Verfügung steht. Wenn dieser Bereich nicht ausreicht, um Abfrageergebnisse zurückzugeben, beginnt die SQL-Engine, den temporären Golabl-Tablespace zu verwenden, der wie eine Festplatte ist, und die Abfrage wird langsam. Wenn die von der Abfrage benötigten Daten so groß sind, dass selbst der temporäre Bereich nicht ausreicht, erhalten Sie einen Tablespace-Fehler.

Gestalten Sie die Abfrage also immer so, dass sie in PGA bleibt, sonst ist es eine rote Flagge.