???? INDEX FULL SCAN 與 INDEX FAST FULL SCAN兩個(gè)長相差不多,乃是一母同胞,因此既有其共性,也有其個(gè)性。兩者來說其共性是不用掃描
表而是通過索引就可以直接返回所需要的所有數(shù)據(jù)。這對提高查詢性能而言,無疑是一個(gè)難得的數(shù)據(jù)訪問方式之一,因?yàn)樗饕写鎯Φ臄?shù)據(jù)通常
是遠(yuǎn)小于原始表的數(shù)據(jù)。下面具體來看看兩者之間的異同。
?
一、何時(shí)INDEX FULL SCAN 或 INDEX FAST FULL SCAN
? ?1、select 與where子句中出現(xiàn)的所有列必須存在索引
? ?2、查詢返回的數(shù)據(jù)行總數(shù)占據(jù)整個(gè)索引10%以上的比率。取決于db_file_multiblock_read_count值與并行度的值
? ?3、滿足像統(tǒng)計(jì)行數(shù)這樣的一些特定的標(biāo)準(zhǔn),如count(*)這樣的操作。count(*)操作幾乎總是使用INDEX FAST FULL SCAN
?? 4、對于索引列上order by之類的操作幾乎總是使用INDEX FULL SCAN
?? 注: 參數(shù)db_file_multiblock_read_count會在index fast full scan 像full table scan一樣生效,因?yàn)檎麄€(gè)索引都被訪問,Oracle 此時(shí)
?允許出現(xiàn)多塊讀(multiblock_read)。db_file_multiblock_read_count與paralle僅僅對index fast full scan情形。其次paralle在新版Oracle
?中是否支持待證實(shí)。一旦上述幾個(gè)條件滿足,基于成本的優(yōu)化器根據(jù)表和索引的統(tǒng)計(jì)信息來調(diào)用 index full scan 或者index fast full scan。
?對于index fast full scan可以通過使用提示index_ffs來實(shí)現(xiàn)。
?
二、何謂INDEX FULL SCAN 與 INDEX FAST FULL SCAN??
三、INDEX FULL SCAN 與 INDEX FAST FULL SCAN 兩者的差異
四、聚合操作count(*)時(shí)的INDEX FULL SCAN 與 INDEX FAST FULL SCAN
五、位圖索引時(shí)的INDEX?FULL?SCAN 與 INDEX FAST?FULL SCAN??
??? 在使用位圖索引時(shí),index full SCAN 與 index fast full與使用B樹索引有相同的表現(xiàn)。需要注意的是位圖索引存儲null值,在很大程度
上對索引進(jìn)行壓縮。其次位圖索引不支持降序掃描方式。此處不再演示位圖索引的index full scan 與 index fast full。
?
六、總結(jié)
?? 1、當(dāng)select和where中出現(xiàn)的列都存在索引是發(fā)生index full scan與index fast full scan的前提
?? 2、查詢返回的數(shù)據(jù)行總數(shù)占據(jù)整個(gè)索引10%以上的比率
?? 3、基于上述前提count(*)操作幾乎總是選擇index fast full scan,而索引列上的order by子句幾乎總是選擇index full scan
?? 4、index fast full scan使用多塊讀的方式讀取索引塊,產(chǎn)生db file scattered reads 事件,讀取時(shí)高效,但為無序讀取
?? 5、index full scan使用單塊讀方式有序讀取索引塊,產(chǎn)生db file sequential reads事件,當(dāng)采用該方式讀取大量索引全掃描,效率低下
?? 6、絕大多數(shù)情況下,index fast full scan性能優(yōu)于index full scan,但前者在有order by時(shí),一定會存在對讀取的塊重新排序的過程
?? 7、index fast full scan通過犧牲內(nèi)存與臨時(shí)表空間換取性能,因此在內(nèi)存不足或飽和狀態(tài)應(yīng)進(jìn)行合理權(quán)衡
?
七、更多參考
父游標(biāo)、子游標(biāo)及共享游標(biāo)
dbms_xplan之display_cursor函數(shù)的使用
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
