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

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