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

Ist es sicher, einen Index auf eine temporäre Oracle-Tabelle zu setzen?

Ich nehme an, wir sprechen von GLOBAL TEMPORARY Tabellen.

Stellen Sie sich eine temporäre Tabelle als mehrere Tabellen vor, die von jedem Prozess spontan aus einer im Systemwörterbuch gespeicherten Vorlage erstellt und gelöscht werden .

In Oracle , DML einer temporary table wirkt sich auf alle Prozesse aus, während die in der Tabelle enthaltenen Daten nur einen Prozess betreffen, der sie verwendet.

Daten in einer temporary table ist nur innerhalb des Sitzungsbereichs sichtbar. Es verwendet TEMPORARY TABLESPACE um sowohl Daten als auch mögliche Indizes zu speichern.

DML für eine temporary table (d. h. sein Layout, einschließlich Spaltennamen und Indizes) ist für jeden mit ausreichenden Rechten sichtbar.

Das bedeutet, dass Existenz des Index wirkt sich sowohl auf Ihren Prozess als auch auf andere Prozesse aus, die die Tabelle verwenden, in dem Sinne, dass jeder Prozess, der Daten in der temporary table ändert müssen auch den Index ändern.

Daten die in der Tabelle (und auch im Index) enthalten sind, wirken sich dagegen nur auf den Prozess aus, der sie erstellt hat, und sind nicht einmal für andere Prozesse sichtbar.

WENN Sie möchten, dass ein Prozess den Index verwendet und ein anderer ihn nicht verwendet, gehen Sie wie folgt vor:

  • Erstellen Sie zwei temporary tables mit gleichem Spaltenlayout
  • Index auf einem von ihnen
  • Indizierte oder nicht indizierte Tabelle je nach Prozess verwenden