2009-04-27 4 views
1

Wie fügen wir Daten über 2 Millionen Zeilen in eine Oracle-Datenbanktabelle ein, in der wir viele Indizes haben? Ich weiß, dass eine Option den Index deaktiviert und dann die Daten einfügt. Kann mir jemand sagen, was die anderen Möglichkeiten sind?SQL Tuning

+0

Ich denke, dass zusätzliche Informationen benötigt werden, um eine sinnvolle Antwort zu geben. Wenn UNDO ausreichend dimensioniert ist, ist dies kein Problem, wenn das Einfügen das * einzige * Ziel ist. Benötigen Sie die Einfügung als eine einzige Transaktion für Lesekonsistenz/Rollback? Gibt es bei der Einfügung von anderen Quellen gleichzeitig DML für die Tabelle? Ist die Art der Anwendung so, dass die Zeit, um dies als eine einzelne Operation durchzuführen, unerschwinglich ist? – dpbradley

+0

Ich möchte die Daten in einer einzigen Transaktion eingefügt werden – venkat

Antwort

0

Nicht sicher, wie Sie die Datensätze einfügen; Wenn du kannst; Fügen Sie die Daten in kleinere Stücke ein. Nach meiner Erfahrung 50 Sätze von 20k Aufzeichnungen sind oft schneller als 1 x 1000000

Achten Sie darauf, Ihre Datenbank-Dateien groß genug sind, bevor Sie starten Sie sparen von Datenbankwachstum während des Einsatzes ...

0

Wenn Sie sicher Neben dem Index können Sie die referenziellen und Constraint-Prüfungen deaktivieren. Sie können auch die Isolationsstufe für Transaktionen herabsetzen.

Alle diese Optionen kommen jedoch mit einem Preis. Jede Option erhöht die Gefahr, dass fehlerhafte Daten in dem Sinne, dass Sie mit null FK des usw. können am Ende

1

Massenladen mit vorsortierten Daten in Indexschlüssel, um

1

prüfen SQL*Loader out (vor allem der Absatz über performance optimization): Es ist das Standard-Dienstprogramm zum Laden von Massen für Oracle, und es macht einen guten Job, sobald Sie wissen, wie man es benutzt (wie immer mit Oracle).

1

gibt es viele Tricks de Einsatz zu befestigen, unter i einige von ihnen schrieb

  • wenn Sie sequence.nextval für Insert verwenden stellen Sie sicher, Folge hat großen Wert Cache (1000 genug ist in der Regel)
  • Tropfen Indizes vor dem Einfügen und anschließend erstellen (stellen Sie sicher, dass Sie die create-Skripte der Indizes vor dem Löschen erhalten) während der Erstellung können Sie parallel Option
  • verwenden, wenn Zieltabelle fk Abhängigkeiten deaktivieren sie vor dem Einfügen und nach dem Einfügen wieder aktivieren. wenn Sie sicher Ihre Daten sind, können Sie novalidate Option (novalidate Option ist nur für Orakel, andere RDBMS-Systeme haben wahrscheinlich ähnliche Option)
  • , wenn Sie wählen, und legen Sie parallel Hinweis für Select-Anweisung geben kann und für legen Sie append Hinweis (Direkt Weg Einsatz) (Direkt Weg Einsatzkonzept gilt für Orakel, andere RDBMS-Systeme haben wahrscheinlich ähnliche Option)
0

Als weitere Option verwenden können, kann ein Orakel benutzen Erweiterte und schnellere Datenpumpen (expdp, impdp) Dienstprogramme Verfügbarkeit 10 G weiter. Allerdings unterstützt Oracle immer noch den alten Export/Import (exp, imp).

Oracle bietet uns viele Möglichkeiten zum Datenladen, einen Weg schneller als andere:

  • Oracle10 Data Pump Oracle Import-Dienstprogramm
  • SQL-Einsatz und fusionieren
  • Anweisungen PL/SQL-Massenlasten für die forall PL/SQL-Operator
  • SQL * Loader

The pros/cons of each can be found here ..