oracle筆記整理10——效能調優之臨時表與物化檢視
1. 臨時表
1) 概念
a) 臨時表跟永久表最大的區別就是表中的資料不會永遠的存在
b) Oracle臨時表分為會話級臨時表和事務級臨時表。
c) 會話臨時表,結束或中斷會話時清空資料。
create global temporary table XXX()
on commit preserve rows;
d) 事務臨時表,commit之後清空資料。
on commit delete rows;
2) 原理
a) 臨時表不會為它們的塊生成redo。因此,對臨時表的操作不是“可恢復的” 。修改臨時表中的一個塊時,不會將這個修改記錄到重做日誌檔案中。不過,臨時表確實會生成 undo,而且這個 undo 會計入日誌。因此,臨時表也會生成一些redo。
b) 這是因為你能回滾到事務中的一個 SAVEPOINT。由於undo資料必須建立日誌,因此臨時表會為所生成的undo生成一些重做日誌。這樣似乎很糟糕。但是,在臨時表上執行的 SQL 語句主要是 INSERT 和SELECT。幸運的是,INSERT 只生成極少的 undo(需要把塊恢復為插入前的“沒有”狀態,而儲存“沒有”不需要多少空間),另外SELECT根本不生成undo。
c) Oracle的臨時表還保證了多使用者操作的獨立性:對於使用同一張臨時表的不同使用者,ORACLE都會分配一個獨立的Temp Segment,這樣就避免了多個使用者在對同一張臨時表操作時發生交叉,從而保證了多個使用者操作的併發性和獨立性;
3) 應用優化
a) 當多表關聯,且存在小表時。可以採用將大表關聯得到比較小的結果集合存放在臨時表中,再用臨時表去關聯小表。
b) 如果某個資料集在這個會話期間需多次使用,建議使用臨時表。
2. 物化檢視
1) 概念
檢視是一個虛擬表(也可以認為是一條語句),基於它建立時指定的查詢語句返回的結果集。每次訪問它都會導致這個查詢語句被執行一次。為了避免每次訪問都執行這個查詢,可以將這個查詢結果集儲存到一個物化檢視(也叫實體化檢視)。
2) 型別
物化檢視的型別:ON DEMAND、ON COMMIT
a) on demand
根據需要(ON DEMAND):物化檢視會在顯式請求的情況下進行重新整理(可以通過手工呼叫,也可以通過執行按照指定的時間間隔的任務)。這意味著從基礎表修改到物化檢視重新整理這段時間內,物化檢視中可能包含失效的資料。
b) on commit
在提交時(ON COMMIT):物化檢視會在基礎表修改所在的同一個事務裡進行自動重新整理,也就是說,物化檢視總是包含最新的資料;(這種方式比較少用)
3) 重新整理
a) 完全重新整理(COMPLETE)
會刪除表中所有的記錄(如果是單表重新整理,可能會採用TRUNCATE的方式),然後根據物化檢視中查詢語句的定義重新生成物化檢視。
b) 快速重新整理(FAST)
採用增量重新整理的機制,只將自上次重新整理以後對基表進行的所有操作重新整理到物化檢視中去。
c) FORCE方式
這是預設的資料重新整理方式。Oracle會自動判斷是否滿足快速重新整理的條件,如果滿足則進行快速重新整理,否則進行完全重新整理。
4) 語法
create materialized view view_name
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
AS subquery;
5) 示例
a) 建立MATERIALIZED VIEW:
create materialized view mv_materialized_test refresh force on demand start with sysdate next
to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'10:25:00'),'dd-mm-yyyy hh24:mi:ss') as
select * from user_info;
--這個物化檢視在每天10:25進行重新整理
b) 修改重新整理時間:
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 23:00:00'),'dd-mm-yyyy hh24:mi:ss');
或
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next trunc(sysdate,'dd')+1+1/24; -- 每天1點重新整理
相關文章
- oracle筆記整理11——效能調優之oracle等待事件與表關聯Oracle筆記事件
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- oracle筆記整理12——效能調優之hint標籤Oracle筆記
- oracle筆記整理14——效能調優之oracle執行計劃Oracle筆記
- oracle 物化檢視重新整理方法Oracle
- Oracle 物化檢視快速重新整理對效能的影響Oracle
- SQLServer效能優化之活用臨時表SQLServer優化
- Oracle如何根據物化檢視日誌快速重新整理物化檢視Oracle
- Oracle 物化檢視1 - 單表聚合及其快速重新整理Oracle
- 物化檢視的快速重新整理測試與物化檢視日誌
- 物化檢視學習筆記筆記
- 【筆記】 使用物化檢視(一)筆記
- oracle10g partition分割槽表與物化檢視materialized viewOracleZedView
- 檢視oracle臨時表空間佔用率的檢視Oracle
- ClickHouse效能優化?試試物化檢視優化
- ClickHouse 效能優化?試試物化檢視優化
- 物化檢視重新整理並非完全根據物化檢視日誌記錄
- LDA臨時筆記,待整理LDA筆記
- 物化檢視妙用__表同步使用物化檢視方法
- 【物化檢視】根據物化檢視日誌快速重新整理物化檢視的過程
- 物化檢視日誌與增量重新整理
- Oracle效能優化:收縮臨時表空間Oracle優化
- oracle物化檢視Oracle
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(三)
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(二)
- 10G物化檢視PCT快速重新整理不再需要物化檢視日誌(一)
- Oracle效能優化視訊學習筆記-診斷和調優工具Oracle優化筆記
- oracle 物化檢視的自動重新整理方法Oracle
- 【ORACLE】物化檢視快速重新整理限制條件Oracle
- Oracle 物化檢視 快速重新整理 限制 說明Oracle
- 10G開始Oracle區分物化檢視和表Oracle
- hg_job配置定時重新整理物化檢視
- oracle 建立物化檢視Oracle
- Oracle 物化檢視建立Oracle
- Oracle效能優化視訊學習筆記-動態調整SGAOracle優化筆記
- oracle10g物化檢視之dbms_mview.explain_mviewOracleViewAI
- oracle10g新特性——物化檢視Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle