sql >> Databasteknik >  >> RDS >> Oracle

Är det säkert att sätta ett index på en Oracle Temporary Table?

Jag antar att vi pratar om GLOBAL TEMPORARY tabeller.

Tänk på en temporär tabell som på flera tabeller som skapas och släpps av varje process i farten från en mall som lagras i systemlexikonet .

I Oracle , DML av en temporary table påverkar alla processer, medan data i tabellen endast kommer att påverka en process som använder dem.

Data i en temporary table är endast synlig inom sessionsomfånget. Den använder TEMPORARY TABLESPACE för att lagra både data och möjliga index.

DML för en temporary table (dvs. dess layout, inklusive kolumnnamn och index) är synlig för alla med tillräckliga privilegier.

Det betyder att existens av indexet kommer att påverka din process såväl som andra processer som använder tabellen i den meningen att alla processer som ändrar data i den temporary table måste också ändra indexet.

Data som finns i tabellen (och även i indexet) kommer tvärtom bara att påverka processen som skapade dem, och kommer inte ens att vara synliga för andra processer.

OM du vill att en process ska använda indexet och en annan inte ska använda det, gör följande:

  • Skapa två temporary tables med samma kolumnlayout
  • Indexa på en av dem
  • Använd indexerad eller icke-indexerad tabell beroende på processen


  1. Data från två tabeller med samma kolumnnamn

  2. CONCAT_WS() för SQL Server

  3. Oracle SQL, fyll saknat värde med det närmaste som inte saknas

  4. Uppdatera flera tabeller i en enda SQL-sats