您好,登錄后才能下訂單哦!
ORACLE數據庫除了可以保存永久表外,還可以建立臨時表temporary tables。這些臨時表用來保存一個會話SESSION的數據,或者保存在一個事務中需要的數據。當會話退出或者用戶提交commit和回滾rollback事務的時候,臨時表的數據自動清空,但臨時表的結構以及元數據還存儲在用戶的數據字典中。
1.會話級臨時表
會話級臨時表是指臨時表中的數據只在會話生命周期之中存在,當會話結束的時候,Oracle自動清除臨時表中數據。所以這里有一個常用的知識點,就是各自會話的數據只有自己才能看到,不同的會話看到的數據自己的(不同的數據),這個知識點在優化場景下利用很多。
格式:
Create Global Temporary Table Table_Name
(xxx int ) On Commit Preserve Rows;
2.事務級臨時表
事務級臨時表是指臨時表中的數據只在事務生命周期中存在。
Create Global Temporary Table Table_Name
(xxx int )
On Commit Delete Rows;
當一個事務結束(commit or rollback),Oracle自動清除臨時表中數據。同樣的事務級臨時表的數據在各會話之間也是獨立的
業務優化最常見的情景如下:
1 用戶在特定時間批量沖刷數據入庫
2 數據庫后臺通過一個中轉表(XXX)先對用戶數據落地
3 依據各種邏輯,把XXX表的數據insert into 各種業務表
問題1:很多開發人員把XXX設計成普通表,而開發者理念又認為這其實只是一個中轉臨時表,索引的設計自然很多人也忽略了。
問題2 : 這個XXX通過多用戶刷數據進來,涉及的數據量應該很大,如果設計成普通表,肯定適當地對一些處理過的數據要進行delete,這樣明顯又影響了業務效率。
利用臨時表的特性就可大量提升此業務的性能問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。