oracle跳躍索引的應用場合

2021-08-22 15:29:47 字數 1243 閱讀 4081

索引跳躍式掃瞄(index skip scan)是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。

根據:索引跳躍式掃瞄(index skip scan)是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。讓我們看以下的範例。請注意到以下**包含著連線索引:

create index

***_emp_id

onemp (***, emp_id)

;

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

select

emp_id

from

empwhere

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 '***_emp_id' (non-unique)

在內部裡,oracle生成了兩個查詢,並連線結果的rowid表。

selectemp_name from emp_where *** 

= 'f' and emp_id = 123

union

select emp_name from emp_where ***

= 'm' and emp_id = 123;

使用索引跳躍式掃瞄的內涵就變得很清晰。

評述:根據上面文章中的結果,實際上,跳躍索引的應用場所是有限的,如果索引的第乙個字段(主列)的資料種類很多的話,跳躍索引對提高效能是很有限的,甚至是沒有用處的,因為實際上oracle內部是生成了多個查詢來完成這項工作的。

所以在實際應用過程中,正確的理解跳躍索引的原理,分析主列資料的情況,是用好跳躍索引的乙個前提。

traits的應用場合

模板 泛型 實際上就是巨集定義乙個型別,此型別是乙個通用型別 故又叫泛型 把具體型別 包括指標型別 帶入進去就會形成乙個新的型別。下面是代入時兩種編譯錯誤的解決方法 一 模板 泛型 具型成 int valuetype 時 代入基本型別 這顯然編譯不過,就像下面這樣偏特化處理 my type trai...

extern C 的應用場合

首先extern c 是一句申明語句,它的意思是告訴編譯器用c的規則去編譯該申明語句後的內容,一般都是申明函式。我們都知道c 具有函式過載的功能,比如說某個檔案包含下面這兩個函式 int foo int a int foo double a 它們的函式名都長得一樣,但是引數型別不一樣。如果該檔案是....

I O復用的應用場合

i o復用 select poll 典型使用在下列網路應用場合 1 當客戶處理多個描述字 通常是互動式輸入和網路套介面 時,必須使用i o復用。2 乙個客戶同時處理多個套介面是可能的,不過比較少見。3 如果乙個tcp伺服器既要處理監聽套介面,又要處理已連線的套介面,一般就要使用i o復用。4 如果乙...