物化視圖VS普通視圖

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

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

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

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

?? ?物化視圖的數據怎么隨著基表而更新?
?? ?Oracle提供了兩種方式,手工刷新和自動刷新,默認為手工刷新。也就是說,通過我們手工的執行某個Oracle提供的系統級存儲過程或包,來保證物 化視圖與基表數據一致性。這是最基本的刷新辦法了。自動刷新,其實也就是Oracle會建立一個job,通過這個job來調用相同的存儲過程或包,加以實 現。
?? ?
?? ?ON DEMAND物化視圖的特性及其和ON COMMIT物化視圖的區別,即前者不刷新(手工或自動)就不更新物化視圖,而后者不刷新也會更新物化視圖,——只要基表發生了COMMIT。
??? 創建定時刷新的物化視圖:create materialized view mv_name refresh force on demand start with sysdate
next sysdate+1 (指定物化視圖每天刷新一次)
??? 上述創建的物化視圖每天刷新,但是沒有指定刷新時間,如果要指定刷新時間(比如每天晚上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 hh24:mi:ss')

3、ON COMMIT物化視圖
?? ?ON COMMIT物化視圖的創建,和上面創建ON DEMAND的物化視圖區別不大。因為ON DEMAND是默認的,所以ON COMMIT物化視圖,需要再增加個參數即可。

?? ?需要注意的是,無法在定義時僅指定ON COMMIT,還得附帶個參數才行。
?? ?創建ON COMMIT物化視圖:create materialized view mv_name refresh force on commit as select * from table_name
?? ?備注:實際創建過程中,基表需要有主鍵約束,否則會報錯(ORA-12014)
4、物化視圖的刷新
??? 刷新(Refresh):指當基表發生了DML操作后,物化視圖何時采用哪種方式和基表進行同步。刷新的模式有兩種:ON DEMAND和ON COMMIT。(如上所述)
??? 刷新的方法有四種:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后進行的修改。COMPLETE 刷新對整個物化視圖進行完全的刷新。如果選擇FORCE方式,則Oracle在刷新時會去判斷是否可以進行快速刷新,如果可以則采用FAST方式,否則采 用COMPLETE的方式。NEVER指物化視圖不進行任何刷新。
???? 對于已經創建好的物化視圖,可以修改其刷新方式,比如把物化視圖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 hh24:mi:ss')
??
5、物化視圖具有表一樣的特征,所以可以像對表一樣,我們可以為它創建索引,創建方法和對表一樣。

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

?

?

普通視圖和物化視圖的區別
答曰:普 通視圖和物化視圖根本就不是一個東西,說區別都是硬拼到一起的,首先明白基本概念,普通視圖是不存儲任何數據的,他只有定義,在查詢中是轉換為對應的定義 SQL去查詢,而物化視圖是將數據轉換為一個表,實際存儲著數據,這樣查詢數據,就不用關聯一大堆表,如果表很大的話,會在臨時表空間內做大量的操作。
普通視圖的三個特征:
1、是簡化設計,清晰編碼的東西,他并不是提高性能的,他的存在只會降低性能(如一個視圖7個表關聯,另一個視圖8個表,程序員不知道,覺得很方便,把兩個視圖關聯再做一個視圖,那就慘了),他的存在未了在設計上的方便性
2、其次,是安全,在授權給其他用戶或者查看角度,多個表關聯只允許查看,不允許修改,單表也可以同WITH READ ONLY來控制,當然有些項目基于視圖做面向對象的開發,即在視圖上去做INSTAND OF觸發器,就我個人而言是不站同的,雖然開發上方便,但是未必是好事。
3、從不同的角度看不同的維度, 視圖可以劃分維度和權限,并使多個維度的綜合,也就是你要什么就可以從不同的角度看,而表是一個實體的而已,一般維度較少(如:人員表和身份表關聯,從人 員表可以查看人員的維度統計,從身份看,可以看不同種類的身份有那些人或者多少人),其次另一個如系統視圖USER_TABLE、TAB、 USER_OBJECTS這些視圖,不同的用戶下看到的肯定是不一樣的,看的是自己的東西。

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


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

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

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

轉載于:https://my.oschina.net/u/264186/blog/638110

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【CASS精品教程】CASS繪圖軟件入門初級教程超詳細資料

文章目錄 第一章 CASS 9.0簡介第二章 CASS 9.0快速入門第三章 測制地形圖第四章 測制地籍圖第五章 土地詳查與勘測定界第六章 CASS在數據入庫中的應用第七章 CASS 9.0在工程中的應用第八章 數字地圖管理第九章 CASS在市政監管中的應用第十章 白紙圖數字化第十一章電子平板成圖第…

多兼容的JS獲取鼠標坐標

//第一、相對于屏幕 function getMousePos(event) {var e event || window.event;return {x:e.screenX,y:screenY} } //第二、相對于瀏覽器 function getMousePos(event) {var e event || window.event;return {x:e.clientX,y:clientY} }//第三、相對于文檔 function getM…

aws-ec2-雙網卡問題

問題描述 在已存在的EC2上新添加網卡后發現,凡是和eth0在同一個網段的只能通過eth0訪問,不能通過eth1。同樣的,在eth1網段的只能通過eth1訪問,不能通過eth0訪問。 如果既不在eth0也不再eth0 默認走eth0(在沒有修改路由表的前提下&…

EditPlust 批量添加自定義工具

先將插件文件***.js文件放到指定目錄,比如editplus的安裝下新文件夾tools。 (下載地址見文末) 將下列代碼內容另存為tool_u.ini 文件(不能改名), 放到EditPlus 的ini文件目錄 (工具-設置目錄 可…

iOS c語言 基本運算符

2019獨角獸企業重金招聘Python工程師標準>>> iOS_06_基本運算符 一、算術運算 c語言一共有34種運算符,包括了常見的加減乘除 1.加法運算 # 除了能做加法運算,還能表示正號:5、90 2.減法運算- # 除了能做減法運算,還能表…

【CASS精品教程】CASS快捷鍵大全吐血整理

A——畫弧(ARC) AA——給實體加地物名 B——自由連接 C——畫圓(CIRCLE) COPYCLIP——從不同窗口復制局部 CP——拷貝(COPY) D——繪制電力線 DD——通用繪圖命令 DDPTYPE——改變點形狀 E——刪除(ERASE) F——圖形復制 FF——繪制多點房屋 G——繪制高程點 H——線型…

Maui學習之路(三)--Winui3深入探討

Maui的學習之路 --- Winui3深入探討學習Maui已經有一段時間,隨著不斷地深入,對Maui有了一些初步的了解。我們都知道Maui為了保持平臺原生特性,所以在每一個平臺都使用了平臺自身的原生開發框架,如在Windows系統使用了Winui3作為UI…

centos 7.1 apache 源碼編譯安裝

Apache編譯安裝 一,需要軟件: http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz 1.apr-1.5.2.tar.gz http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz 2.apr-util-1.5.4.tar.gz http://exim.mirror.fr/pcre/pcre-8.38.tar.gz 3.pcre-8…

【ArcGIS風暴】ArcGIS平臺上點云(.las)數據生成等高線方法案例精解

las是點云數據常見的存儲格式,攝影測量和激光雷達數據均采用此格式,點云數據常用來生成等高線,地籍測量,土方量計算等。本文講解在ArcGIS平臺上生成等高線并轉換為dwg格式供CASS使用。 擴展閱讀: 什么是點云?什么是Las數據集?一篇文章告訴你點云數據的奧秘 ArcGIS+CASS點…

通過兩級網關設計來路由服務網格流量

編者的話本文是來自筆者的公司 Tetrate[1] 工程師 Petr McAllister 的分享,Tetrate 的拳頭產品是 Tetrate Service Bridge[2](下文簡稱 TSB),它是在開源的 Istio 和 Envoy 基礎上構建的,但為其增加了管理平面。簡介Tet…

各個線程順序循環執行

問題描述:A任務執行完之后執行B任務,B任務執行之后再執行C任務,C任務執行完之后A再執行任務,以此循環下去 Task 1 package com.ydd.work.concurrent;2 3 import java.util.concurrent.atomic.AtomicInteger;4 /**5 * 6 * author…

python類相關

class A:def bar(self):print("BAR")self.f1() class B(A):def f1(self):print("B") class C:def f1(self):print("C") class D(C,B):pass obj D() obj.bar() # 創建了類A、B、C、D; # D繼承了C和B,B繼承了A,…

Python File 介紹

Open() 方法 Python open() 方法用于打開一個文件,并返回文件對象,在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出 OSError。 注意:使用 open() 方法一定要保證關閉文件對象,即調用…

H5開發中常用的js方法

2019獨角獸企業重金招聘Python工程師標準>>> h5和app之間的webview交互 這是常用的交互方法之一,iOS可以使用WKWebView,安卓可以使用JsBridge,完成常見的交互效果。function webViewHandler(iosCallback, adrCallback) {if (getMobileOperatingSystem() …

【前端優化】

如何進行前端優化 (1) 減少http 請求次數:css spirit(多張小圖放一個大圖上,用定位選擇不同小圖),data uri(壓縮圖片大小), 圖片大小控制合適;網頁Gzip&#…

GPS RTK(銀河1)基準站架設、移動站設置完整操作流程

本文講解GPS RTK(銀河1)基站架設完整操作流程,包括相對坐標、點校正等操作。 文章目錄 一、架設基準站二、啟動基準站三、架設移動站四、設置移動站一、架設基準站 基準站一定要架設在視野比較開闊,周圍環境比較空曠的地方,地勢比較高的地方;避免架在高壓輸變電設備附近…

在.NET 6.0上使用Kestrel配置和自定義HTTPS

本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我們將學習ASP.NET Core的Kestrel配置和自定義HTTPS,好我們開始正文。在ASP.NET Core中,默認情況下HTTPS處于打開狀態,這個不是問題,我們無需禁用它。因為如果…

dom4j-2.1.1 jaxen-1.1.6 讀取xml數據源

<?xml version"1.0" encoding"UTF-8"?> <data><row><id>1</id><name>JackieChen</name></row><row><id>2</id><name>TomLee</name></row> </data> package…

Virtualbox安裝增強工具失敗

在安裝Virtualbox增強工具安裝時出現unable to find the sources of your current Linux kernel&#xff0c;安裝失敗&#xff0c;導致主機與虛擬機之間不能共享文件夾&#xff0c;不能復制粘貼&#xff0c;鼠標也不能直接移動到物理機&#xff0c;需要按快捷鍵才行。 解決辦法…

C語言試題118之求1到20的每個數的階層之和

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:求 1+2!+3!+…+20!的和 分析:此程序只是把累加變成了累乘。 2 、溫馨提示 想獲取更多…