- 精通Oracle 12c 數(shù)據(jù)庫管理
- 王榮鑫
- 1270字
- 2019-07-30 18:03:57
2.6 視圖
下面各小節(jié)將介紹一般數(shù)據(jù)庫用戶、開發(fā)人員或DBA創(chuàng)建并使用基本視圖的基礎(chǔ)知識。
2.6.1 普通枧圖
通常稱之為“視圖”,不會占據(jù)任何內(nèi)存空間,只有它的定義(查詢)存儲在數(shù)據(jù)字典中。視圖底層查詢的表稱為“基表”,視圖中的每個基表都可以進(jìn)一步定義為視圖。
視圖有許多優(yōu)點(diǎn),它可以隱藏數(shù)據(jù)復(fù)雜性:高級分析人員可以定義包含EMPLOYEE表的視圖,這樣上層管理部門可以更容易地使用select語句檢索相關(guān)信息,這種檢索表面上看起來是使用表,但實(shí)際上是包含查詢的視圖,該查詢連接EMPLOYEE表。視圖也可以用于實(shí)施安全性。EMPLOYEE表上的視圖EMPINFO只能檢索雇員名和雇員編號,并且該視圖應(yīng)定義為只讀,從而防止更新該表。
【示例2-19】創(chuàng)建普通視圖
create view empinfo as select EMPNO, ENAME from employee with read only;
如果沒有read only子句,則可以更新某行或添加行到視圖中,甚至在包含多個表的視圖上進(jìn)行這些操作。視圖中有一些構(gòu)造可防止對其進(jìn)行更新,例如使用distinct操作符、聚集函數(shù)或group by子句。當(dāng)Oracle處理包含視圖的查詢時,它替換用戶select語句中的底層查詢定義,并且處理結(jié)果查詢,就好像視圖不存在一樣。因此,在使用視圖時,基表上任何已有索引的優(yōu)點(diǎn)并沒有改變。
2.6.2 物化視圖
在某些方面,物化視圖非常類似于普通視圖:視圖的定義存儲在數(shù)據(jù)字典中,并且該視圖對用戶隱藏底層基查詢的細(xì)節(jié)。但是,相似之處僅限于此。
物化視圖也在數(shù)據(jù)庫段中分配空間,用于保存執(zhí)行基查詢得到的結(jié)果集。物化視圖可用于將表的只讀副本復(fù)制到另一個數(shù)據(jù)庫,該副本具有和基表相同的列定義和數(shù)據(jù)。這是物化視圖最簡單的實(shí)現(xiàn)。為了減少刷新物化視圖時的響應(yīng)時間,可以創(chuàng)建物化視圖日志以刷新物化視圖。否則,在需要刷新時就必須進(jìn)行完全刷新,即必須獲取基查詢的全部結(jié)果以刷新物化視圖。
物化視圖日志為以增量方式更新物化視圖提供了方便。在數(shù)據(jù)倉庫環(huán)境中,物化視圖可存儲來自于group by rollup或group by cube查詢的聚集數(shù)據(jù),如果設(shè)置適當(dāng)?shù)某跏紖?shù)值,例如query rewrite enable,并且查詢自身允許查詢重寫(使用query rente子句),則任何與物化視圖執(zhí)行相同類型的聚集操作的查詢將自動使用物化視圖,而不是運(yùn)行初始的查詢。無論物化視圖的類型是什么,在基表中提交事務(wù)或根據(jù)需要刷新它時,系統(tǒng)都會自動對物化視圖進(jìn)行刷新。
物化視圖在很多方面類似于索引,它們都直接和表聯(lián)系并且占用空間,在更新基表時必須刷新它們,它們的存在對用戶而言實(shí)際上是透明的。通過使用可選的訪問路徑來返回查詢結(jié)果,它們可以幫助優(yōu)化查詢。
2.6.3 對象視圖
面向?qū)ο螅∣O)的應(yīng)用程序開發(fā)環(huán)境已經(jīng)變得越來越流行,Oracle 10g數(shù)據(jù)庫完全支持?jǐn)?shù)據(jù)庫中本地化對象和方法的實(shí)現(xiàn)。然而,從純粹的關(guān)系數(shù)據(jù)庫環(huán)境向純粹的OO數(shù)據(jù)庫環(huán)境遷移并不是容易的過程,很少有組織愿意花費(fèi)時間和資源從頭開始構(gòu)建新的系統(tǒng),而Oracle 10g使用對象視圖使這種變遷變得更為容易。
對象視圖允許面向?qū)ο蟮膽?yīng)用程序查看作為對象集合的數(shù)據(jù),這種對象集合具有屬性和方法,而遺留系統(tǒng)仍然可以對INVENTORY表運(yùn)行批處理作業(yè)。對象視圖可以模仿抽象數(shù)據(jù)類型、對象標(biāo)識符(OID)以及純粹的OO數(shù)據(jù)庫環(huán)境能夠提供的引用。和普通視圖一樣,可以在視圖定義中使用instead of觸發(fā)器來允許針對視圖的DML,這里使用的是pl/sql代碼塊,而不是用戶或應(yīng)用程序提供的實(shí)際DML語句。
- DB2 V9權(quán)威指南
- Python程序設(shè)計教程(第2版)
- Python入門很簡單
- Cocos2d-x游戲開發(fā):手把手教你Lua語言的編程方法
- 動手玩轉(zhuǎn)Scratch3.0編程:人工智能科創(chuàng)教育指南
- Swift 3 New Features
- Mastering Unity Shaders and Effects
- 手把手教你學(xué)C語言
- Serverless架構(gòu)
- 微服務(wù)從小白到專家:Spring Cloud和Kubernetes實(shí)戰(zhàn)
- Advanced Express Web Application Development
- ScratchJr趣味編程動手玩:讓孩子用編程講故事
- Django 3.0應(yīng)用開發(fā)詳解
- Java 9 with JShell
- Sitecore Cookbook for Developers