oracle臨時表

llnnmc發表於2017-10-12

臨時表建立在全域性上,所有會話都可以訪問,但其中的行資料是被插入行的會話所持有的,開發人員可將它們做為私有儲存區來操縱資料,不同使用者只能操縱自己的行資料,誰都看不到其他人的行。

 

臨時表的建立語法如下:

create global temporary table <temp_table_name>

(column datatype[, column datatype])

[on commit {delete | preserve} rows];

 

末尾的可選子句確定了插入行的生命週期。預設方式是在插入行的事務完成之時,刪除相應的行。但也可以改變此行為,以便將行資料保留到插入行的會話結束為止。

 

臨時表不支援主外來鍵關係。臨時表上也不會有DML鎖,因為臨時表資料是被會話私有的。可以為臨時表建立索引、約束和觸發器,可以在檢視和同義詞中引用它,可以與其他錶連結。臨時表的資料是臨時的,專用於相應的會話,針對其執行的所有SQL的速度遠比在永久表上快。

 

臨時表操作速度快的原因有以下幾點:

1、臨時表不是永久表空間中的段,理想狀態下,它們僅存在於使用它們的會話的PGA中,因此不涉及磁碟活動,甚至不涉及資料庫緩衝區快取的活動。

2、如果PGA無法容納臨時表,則將資料寫出到臨時表空間的臨時段中。而臨時表空間上的I/O遠比永久表空間上的I/O速度快,因為前者不涉及資料庫緩衝區快取,而全部由會話的伺服器程式直接在磁碟上執行。

3、針對臨時表的DML幾乎不生成重做資料,這使得其DML操作更快。

 

臨時表的應用場景如在一個會話中將查詢到的記錄存放在臨時表中,以便可以重複呼叫,當會話斷開時,資料自動清空。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2145921/,如需轉載,請註明出處,否則將追究法律責任。

相關文章