索引跳躍式掃瞄(index skip scan)是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。
根據:索引跳躍式掃瞄(index skip scan)是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。讓我們看以下的範例。請注意到以下**包含著連線索引:
create index***_emp_id
onemp (***, emp_id)
;
在oracle9i版本之前,當sql查詢中包含性別和emp_id時,或者查詢指定性別行的時候才可以使用這一索引。下面的查詢不能夠使用連線索引:
selectemp_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 如果乙...