1. 程式人生 > 其它 >Oracle資料庫之檢視與索引

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. 檢視的優點

  1. 簡化對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。
  2. 使用者通過簡單的查詢可以從複雜查詢中得到結果。
  3. 維護資料的獨立性,檢視可從多個表中檢索資料。
  4. 對於相同的資料可產生不同的檢視。
  5. 提供各種資料表現形式,可以使用各種不同的方式將基表的資料展現在使用者面前,以便符合使用者的使用習慣。
  6. 提供安全性保證,檢視提供了一種可以控制的方式,即可以讓不同的使用者看見不同的列,而不允許訪問那些敏感的列,這樣就可以保證敏感資料不被使用者看見。
  7. 簡化使用者許可權的管理,可以將檢視的許可權授予使用者,而不必將基表中某些列的許可權授予使用者,這樣就簡化了使用者許可權的定義。

4. 索引

為了提高查詢的速度,當用戶對查詢速度不滿意而需要對資料庫的效能進行調校時,優先考慮建立索引。

建立索引語法:

CREATE [UNIQUE] INDEX index_name
    ON table(column1 [ASC | DESC] [, column2 [ASC | DESC] ]... ...) 

示例:

CREATE INDEX idx_ename ON employee (ename, sal DESC);

適當的使用索引可以提高資料檢索速度,可以給經常需要進行查詢的欄位建立索引。

向表中“新增”行或從表中“刪除”行時,必須花費額外的時間來更新該表的索引,所以當需要從大表中檢索少數幾行時建立索引。一般我們認為當任何單個查詢要檢索的行小於整個表總行數的10%時,索引就非常有用。

表的主鍵和唯一鍵將自動建立索引。