程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 使用索引跳躍式掃描以提高查詢速度

使用索引跳躍式掃描以提高查詢速度

編輯:Oracle數據庫基礎

索引跳躍式掃描(index skip scan)是Oracle9i的一個新的執行特性,尤其適用於使用連接索引和訪問多值索引的Oracle查詢。讓我們看以下的范例。請注意到以下代碼包含著連接索引:

  

  create index

    sex_emp_id

  on

    emp (sex, emp_id)

  ;
  

在Oracle9i版本之前,當SQL查詢中包含性別和emp_id時,或者查詢指定性別行的時候才可以使用這一索引。下面的查詢不能夠使用連接索引:

  

  select

    emp_id

  from

    emp

  where

    emp_id = 123;
  

Oracle9i的索引跳躍式掃描執行規則允許使用連接索引,即使SQL查詢中不指定性別。這一特性使得無需在emp_id行中提供第二個索引。Oracle承認索引跳躍式掃描沒有直接索引查詢速度快,但可以這樣說,相比於整個表掃描(table scan),索引跳躍式掃描的速度要快得多。

當Oracle沒有指明索引跳躍式掃描的內部內容時,我們可以從它的執行規則中判斷出,Oracle在內部上生成了多個查詢,這樣就滿足帶有多個子查詢的查詢。

  

  SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=1 Bytes=5)

    0 SORT (AGGREGATE)

      1 INDEX (SKIP SCAN) OF 'SEX_EMP_ID' (NON-UNIQUE)
  

在內部裡,Oracle生成了兩個查詢,並連接結果的ROWID表。

  

  selectemp_name from emp_where sex = 'F' and emp_id = 123

  UNION

  select emp_name from emp_where sex = 'M' and emp_id = 123;
  

使用索引跳躍式掃描的內涵就變得很清晰。對於高順序鍵(high order key)中的獨特值數目,Oracle的索引跳躍式掃描性能將會降低。如果主列有50個值,Oracle要發出50條查詢才能找回結果。索引跳躍式掃描只適用於硬盤空間和存儲空間相當緊缺的情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved