oralce索引中INDEX SKIP SCAN 和 INDEX RANGE SCAN區別


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的范圍里查,這樣會很快

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM