久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle普通視圖和物化視圖的區(qū)別有哪些

141次閱讀
沒有評論

共計 3790 個字符,預計需要花費 10 分鐘才能閱讀完成。

本篇內容主要講解“Oracle 普通視圖和物化視圖的區(qū)別有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Oracle 普通視圖和物化視圖的區(qū)別有哪些”吧!

物化視圖是一種特殊的物理表,“物化”(Materialized)視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的局限性大,任何對視圖的查詢,Oracle 都實際上轉換為視圖 SQL 語句的查詢。這樣對整體查詢性能的提高,并沒有實質上的好處。

1、物化視圖的類型:ON DEMAND、ON COMMIT
二者的區(qū)別在于刷新方法的不同,ON DEMAND 顧名思義,僅在該物化視圖“需要”被刷新了,才進行刷新(REFRESH),即更新物化視圖,以保證和基表數據的一致性;而 ON COMMIT 是說,一旦基表有了 COMMIT,即事務提交,則立刻刷新,立刻更新物化視圖,使得數據和基表一致。

2、ON DEMAND 物化視圖
物化視圖的創(chuàng)建本身是很復雜和需要優(yōu)化參數設置的,特別是針對大型生產數據庫系統而言。但 Oracle 允許以這種最簡單的,類似于普通視圖的方式來做,所以不可避免的會涉及到默認值問題。也就是說 Oracle 給物化視圖的重要定義參數的默認值處理是我們需要特別注意的。
物化視圖的特點:
(1) 物化視圖在某種意義上說就是一個物理表(而且不僅僅是一個物理表),這通過其可以被 user_tables 查詢出來,而得到佐證;
(2) 物化視圖也是一種段(segment),所以其有自己的物理存儲屬性;
(3) 物化視圖會占用數據庫磁盤空間,這點從 user_segment 的查詢結果,可以得到佐證;

創(chuàng)建語句:create materialized view mv_name as select * from table_name

默認情況下,如果沒指定刷新方法和刷新模式,則 Oracle 默認為 FORCE 和 DEMAND。

3、物化視圖的數據怎么隨著基表而更新?
Oracle 提供了兩種方式,手工刷新和自動刷新,默認為手工刷新。也就是說,通過我們手工的執(zhí)行某個 Oracle 提供的系統級存儲過程或包,來保證物化視圖與基表數據一致性。這是最基本的刷新辦法了。自動刷新,其實也就是 Oracle 會建立一個 job,通過這個 job 來調用相同的存儲過程或包,加以實現。

4、ON DEMAND 物化視圖的特性及其和 ON COMMIT 物化視圖的區(qū)別
前者不刷新 (手工或自動) 就不更新物化視圖,而后者不刷新也會更新物化視圖,——只要基表發(fā)生了 COMMIT。
創(chuàng)建定時刷新的物化視圖:

create materialized view mv_name refresh force on demand start with sysdate
next sysdate+1 (指定物化視圖每天刷新一次)

上述創(chuàng)建的物化視圖每天刷新,但是沒有指定刷新時間,如果要指定刷新時間(比如每天晚上 10:00 定時刷新一次):

create materialized view mv_name 
refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1, dd-mm-yyyy),  22:00:00 ), dd-mm-yyyy hh34:mi:ss )

5、ON COMMIT 物化視圖
ON COMMIT 物化視圖的創(chuàng)建,和上面創(chuàng)建 ON DEMAND 的物化視圖區(qū)別不大。因為 ON DEMAND 是默認的,所以 ON COMMIT 物化視圖,需要再增加個參數即可。

需要注意的是,無法在定義時僅指定 ON COMMIT,還得附帶個參數才行。

創(chuàng)建 ON COMMIT 物化視圖:

create materialized view mv_name refresh force on commit as select * from table_name

備注:實際創(chuàng)建過程中,基表需要有主鍵約束,否則會報錯(ORA-12014)

6、物化視圖的刷新
刷新(Refresh):指當基表發(fā)生了 DML 操作后,物化視圖何時采用哪種方式和基表進行同步。刷新的模式有兩種:ON DEMAND 和 ON COMMIT。(如上所述)

刷新的方法有四種:FAST、COMPLETE、FORCE 和 NEVER。

FAST 刷新采用增量刷新,只刷新自上次刷新以后進行的修改。COMPLETE 刷新對整個物化視圖進行完全的刷新。如果選擇 FORCE 方式,則 Oracle 在刷新時會去判斷是否可以進行快速刷新,如果可以則采用 FAST 方式,否則采用 COMPLETE 的方式。NEVER 指物化視圖不進行任何刷新。

對于已經創(chuàng)建好的物化視圖,可以修改其刷新方式,比如把物化視圖 mv_name 的刷新方式修改為每天晚上 10 點刷新一次:

alter materialized view mv_name 
refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1, dd-mm-yyyy),  22:00:00 ), dd-mm-yyyy hh34:mi:ss )

7、物化視圖具有表一樣的特征,所以可以像對表一樣,我們可以為它創(chuàng)建索引,創(chuàng)建方法和對表一樣。

8、物化視圖的刪除:
雖然物化視圖是和表一起管理的,但是在經常使用的 PLSQL 工具中,并不能用刪除表的方式來刪除(在表上右鍵選擇‘drop’并不能刪除物化視圖),可以使用語句來實現:

drop materialized view mv_name

==============================
其他參考普通視圖和物化視圖的區(qū)別

普通視圖和物化視圖根本就不是一個東西,說區(qū)別都是硬拼到一起的,首先明白基本概念,普通視圖是不存儲任何數據的,他只有定義,在查詢中是轉換為對應的定義 SQL 去查詢,而物化視圖是將數據轉換為一個表,實際存儲著數據,這樣查詢數據,就不用關聯一大堆表,如果表很大的話,會在臨時表空間內做大量的操作。

普通視圖的三個特征:
1、是簡化設計,清晰編碼的東西,他并不是提高性能的,他的存在只會降低性能(如一個視圖 7 個表關聯,另一個視圖 8 個表,程序員不知道,覺得很方便,把兩個視圖關聯再做一個視圖,那就慘了),他的存在未了在設計上的方便性
2、其次,是安全,在授權給其他用戶或者查看角度,多個表關聯只允許查看,不允許修改,單表也可以同 WITH READ ONLY 來控制,當然有些項目基于視圖做面向對象的開發(fā),即在視圖上去做 INSTAND OF 觸發(fā)器,就我個人而言是不站同的,雖然開發(fā)上方便,但是未必是好事。
3、從不同的角度看不同的維度,視圖可以劃分維度和權限,并使多個維度的綜合,也就是你要什么就可以從不同的角度看,而表是一個實體的而已,一般維度較少(如:人員表和身份表關聯,從人員表可以查看人員的維度統計,從身份看,可以看不同種類的身份有那些人或者多少人),其次另一個如系統視圖 USER_TABLE、TAB、USER_OBJECTS 這些視圖,不同的用戶下看到的肯定是不一樣的,看的是自己的東西。

物化視圖呢,用于 OLAP 系統中,當然部分 OLTP 系統的小部分功能未了提高性能會借鑒一點點,因為表關聯的開銷很大,所以在開發(fā)中很多人就像把這個代價交給定期轉存來完成,ORACLE 當然也提供了這個功能,就是將視圖(或者一個大 SQL)的信息轉換為物理數據存儲,然后提供不同的策略:定時刷還是及時刷、增量刷還是全局刷等等可以根據實際情況進行選擇,總之你差的是表,不是視圖。

關于在刷新和索引上的區(qū)別

他們兩個沒有聯系吧,刷新我不清楚你是否指的是物化視圖的刷新,因為刷新的概念很泛,你說到這里我就理解為物化視圖的刷新了,上面也已經說了,這是一種策略和方法,其實它是通過對視圖關聯表上創(chuàng)建相應的 LOG,根據日志信息的 SQL 同步到物化視圖中的,一般來說:定時的一般是全局刷,及時的一般是局部刷。

而索引這個說起來就多了,可以說索引專門是一門課程,大概點來說,索引一般有普通索引、位圖索引、唯一性索引(還有全文索引啥的,一般不用),其實仔細研究會發(fā)現無論是那一種索引都是 B + 樹為基礎,并起存放方式和表一樣,是以段為單位,只是內部有樹關系而已。
1、普通索引是根據 B + 樹找到第一個(索引時有序的),然后以當前為基準,向后順序找到不符合條件的健值為止。
2、位圖是在葉子節(jié)點上根據位圖種類對葉子節(jié)點的值進行 01 編碼存放(如該字段有 1、2、3 三種值,就會在葉子節(jié)點上有三個位圖,每個位圖根據健值和 ROWID 順序存放是否為 1、是否為 2、是否為 3,所以在 RBO 下統計很快,CBO 下一般會認為是普通索引)。
3、也是按照 B + 樹找,只是找到就不再做任何操作,因為是唯一的。

因為 B + 查找是一個類似表的查詢,而且獲取到 ROWID 后還是要回表查詢的,所以這個過程的開銷要和全表掃描計算那個結果更加快,ORACLE 才會選擇是走索引還是走全表掃描,當然對于 CBO 和 RBO 選擇的方式不一樣,具體又是很多,CBO 要依賴于表的統計信息,RBO 是依賴于嘗試。

到此,相信大家對“Oracle 普通視圖和物化視圖的區(qū)別有哪些”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-07-20發(fā)表,共計3790字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 鸡泽县| 柳河县| 丽江市| 奈曼旗| 托克逊县| 甘孜县| 青龙| 武威市| 日土县| 衡阳县| 永胜县| 杨浦区| 大石桥市| 吴桥县| 安化县| 赣州市| 海淀区| 金川县| 富裕县| 赤水市| 武邑县| 五莲县| 聂拉木县| 庆元县| 光山县| 田林县| 南木林县| 保定市| 繁峙县| 永春县| 禹州市| 阳新县| 漳州市| 孝感市| 平远县| 临武县| 专栏| 景宁| 上蔡县| 纳雍县| 安平县|