Oracle資料庫之檢視與索引
Oracle資料庫之檢視與索引
1. 檢視簡介
檢視是基於一個表或多個表或檢視的邏輯表,本身不包含資料,通過它可以對錶裡面的資料進行查詢和修改。
檢視基於的表稱為基表,檢視是儲存在資料字典裡的一條SELECT語句。通過建立檢視可以提取資料的邏輯上的集合或組合。
我們可以像使用表一樣使用檢視,但需要注意的是:查詢檢視沒有什麼限制,插入/更新/刪除檢視的操作會受到一定的限制;所有針對檢視的操作都會影響到檢視的基表;為了防止使用者通過檢視間接修改基表的資料,可以將檢視建立為只讀檢視(帶上with read only選項)。
2. 建立檢視
語法:
CREATE [OR REPLACE] [[NO] FORCE] [EDITIONING] VIEW [schema.] view_name [ ( { alias [ inline_constraint... ] | out_of_line_constraint } [, { alias [ inline_constraint...] | out_of_line_constraint } ] ) | object_view_clause | XMLType_view_clause ] AS subquery [ subquery_restriction_clause ] ;
說明:
FORCE:”強制”建立檢視,不考慮基表是否存在,也不考慮是否具有使用基表的許可權。
alias:檢視的列別名,別名的個數必須與SELECT查詢中列的個數相同,如果SELECT查詢包含函式或表示式,則必須為其定義列別名。
subquery:查詢語句。
subquery_restriction_clause:查詢語句限制:
WITH { READ ONLY | CHECK OPTION } [ CONSTRAINT constraint ]
READ ONLY:建立的檢視只能用於查詢資料,而不能用於更改資料。
CHECK OPTION:指定對檢視執行的dml操作必須滿足“檢視子查詢”的條件,即對通過檢視進行的增刪改操作進行“檢查”,要求增刪改操作的資料,必須是SELECT查詢所能查詢到的資料,否則不允許操作並返回錯誤提示。
完整的語法結構及說明見:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_8004.htm#SQLRF01504
示例:
CREATE OR REPLACE VIEW vw_dept (name,minsal,maxsal,avgsal) AS SELECT d.dname,min(e.salary),max(e.salary),avg(e.salary) FROM employee e, dept d WHERE e.did=d.id GROUP BY d.dname WITH READ ONLY;
3. 檢視的優點
- 簡化對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。
- 使用者通過簡單的查詢可以從複雜查詢中得到結果。
- 維護資料的獨立性,檢視可從多個表中檢索資料。
- 對於相同的資料可產生不同的檢視。
- 提供各種資料表現形式,可以使用各種不同的方式將基表的資料展現在使用者面前,以便符合使用者的使用習慣。
- 提供安全性保證,檢視提供了一種可以控制的方式,即可以讓不同的使用者看見不同的列,而不允許訪問那些敏感的列,這樣就可以保證敏感資料不被使用者看見。
- 簡化使用者許可權的管理,可以將檢視的許可權授予使用者,而不必將基表中某些列的許可權授予使用者,這樣就簡化了使用者許可權的定義。
4. 索引
為了提高查詢的速度,當用戶對查詢速度不滿意而需要對資料庫的效能進行調校時,優先考慮建立索引。
建立索引語法:
CREATE [UNIQUE] INDEX index_name ON table(column1 [ASC | DESC] [, column2 [ASC | DESC] ]... ...)
示例:
CREATE INDEX idx_ename ON employee (ename, sal DESC);
適當的使用索引可以提高資料檢索速度,可以給經常需要進行查詢的欄位建立索引。
向表中“新增”行或從表中“刪除”行時,必須花費額外的時間來更新該表的索引,所以當需要從大表中檢索少數幾行時建立索引。一般我們認為當任何單個查詢要檢索的行小於整個表總行數的10%時,索引就非常有用。
表的主鍵和唯一鍵將自動建立索引。