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

Oracle 11G - Leistungseffekt der Indizierung beim Einfügen

Es stimmt, dass es schneller geht, eine Tabelle zu ändern, wenn Sie nicht auch einen oder mehrere Indizes ändern und möglicherweise auch eine Einschränkungsprüfung durchführen müssen, aber es ist auch weitgehend irrelevant, wenn Sie diese Indizes dann hinzufügen müssen. Sie müssen die gesamte Änderung des Systems betrachten, die Sie durchführen möchten, nicht nur einen einzelnen Teil davon.

Wenn Sie einer Tabelle, die bereits Millionen von Zeilen enthält, eine einzelne Zeile hinzufügen, wäre es offensichtlich töricht, Indizes zu löschen und neu zu erstellen.

Aber selbst wenn Sie eine völlig leere Tabelle haben, in die Sie mehrere Millionen Zeilen hinzufügen werden, kann es immer noch langsamer sein, die Indizierung auf später zu verschieben.

Der Grund dafür ist, dass eine solche Einfügung am besten mit dem direkten Pfadmechanismus durchgeführt wird, und wenn Sie direkte Pfadeinfügungen in eine Tabelle mit darauf befindlichen Indizes verwenden, werden temporäre Segmente erstellt, die die zum Erstellen der Indizes erforderlichen Daten enthalten (Daten plus Zeilen-IDs ). Wenn diese temporären Segmente viel kleiner sind als die Tabelle, die Sie gerade geladen haben, können sie auch schneller gescannt und die Indizes daraus erstellt werden.

Die Alternative, wenn Sie fünf Indizes in der Tabelle haben, besteht darin, fünf vollständige Tabellenscans durchzuführen, nachdem Sie sie geladen haben, um die Indizes zu erstellen.

Offensichtlich gibt es hier große Grauzonen, aber gut gemacht für:

  1. Infragestellung von Autorität und allgemeinen Faustregeln und
  2. Durchführen aktueller Tests, um die Fakten in Ihrem eigenen Fall zu ermitteln.

Bearbeiten:

Weitere Überlegungen:Sie führen eine Sicherung durch, während die Indizes gelöscht werden. Jetzt, nach einer Notfallwiederherstellung, brauchen Sie ein Skript, das überprüft, ob alle Indizes vorhanden sind, wenn Ihnen das Geschäft im Nacken sitzt, um das System wieder hochzufahren.

Wenn Sie absolut entschlossen sind, Indizes während eines Massenladens nicht zu verwalten, löschen Sie die Indizes nicht – deaktivieren Sie sie stattdessen. Dadurch werden die Metadaten für das Vorhandensein und die Definition der Indizes beibehalten und ein einfacherer Neuerstellungsprozess ermöglicht. Achten Sie nur darauf, dass Sie Indizes nicht versehentlich wieder aktivieren, indem Sie die Tabelle abschneiden, da dadurch deaktivierte Indizes wieder aktiviert werden.