INDEX SKIP SCAN
當表中建立有復合索引的時候,查詢時,除復合索引第一列外,別的列作為條件時,且優化器模式為CBO,這個時候查詢可能會用到INDEX SKIP SCAN
skip scan會檢測出前導列的唯一值個數,每個唯一值都會作為常規掃描的入口,再次基礎上做一次查找,最后將這些查詢的結果合並返回;
舉個例子:加入有這么一張表student(字段id,sex,name等)創建了一個復合索引(sex,name);
select id,sex,name where name = '張四'
上面這個查詢條件name在復合索引中,且不是第一列,那么會將第一列sex,作為入口,sex列在數據庫中無非兩個值:男或女,那么它將轉換為
select id,sex,name where sex = '男' and name = '張四' union select id,sex,name where sex = '女' and name = '張四';
也就是說sex有幾個值,他就會有幾個查詢,並將這幾個查詢結果合並
如果入口的數據集較大時,那么這個查詢效率是很低的。但是相比全表掃描來說也是很快的,相比直接索引來說效率是低下的
INDEX RANGE SCAN
range scan是一種常用的檢索方式,在index range scan中oracle訪問毗鄰的索引條目,然后根據rowid去檢索表里的條目,
例如查詢:查詢范圍為80號的部門里的所有員工
select JOB_ID,FIRST_NAME from employees where DEPARTMENT_ID=80;
INDEX RANGE SCAN是范圍掃描,舉個例子,有1到100,分5個范圍,要查詢45就要到第3的范圍里查,這樣會很快