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

Wie und wann werden Indizes in INSERT- und UPDATE-Operationen verwendet?

Für UPDATE-Anweisungen kann der Index vom Optimierer verwendet werden, wenn er der Meinung ist, dass der Index ihn beschleunigen kann. Der Index würde verwendet, um die zu aktualisierenden Zeilen zu lokalisieren. Der Index ist sozusagen auch eine Tabelle. Wenn also die indizierte Spalte aktualisiert wird, muss sie natürlich auch den Index AKTUALISIEREN. Wenn Sie andererseits ein Update ohne WHERE-Klausel ausführen, kann der Optimierer entscheiden, keinen Index zu verwenden, da er auf die gesamte Tabelle zugreifen muss. Ein vollständiger Tabellenscan ist möglicherweise effizienter (muss aber möglicherweise immer noch den Index aktualisieren ). Der Optimierer trifft diese Entscheidungen zur Laufzeit basierend auf mehreren Parametern, z. B. ob es gültige Statistiken zu den betreffenden Tabellen und Indizes gibt, wie viele Daten betroffen sind, welche Art von Hardware usw.

Für INSERT-Anweisungen, obwohl INSERT selbst den Index nicht benötigt, muss der Index auch 'eingefügt in' werden, also muss von Oracle darauf zugegriffen werden. Ein weiterer Fall, in dem INSERT bewirken kann, dass der Index verwendet wird, ist ein INSERT wie dieser:

INSERT INTO mytable (mycolmn)
SELECT mycolumn + 10 FROM mytable;