Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED

Oracle12c開始,我們在獲取SQL語句的執行計劃時,也會經常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那麼,這個操作到底是什麼意思呢?有什麼作用呢?下面我們先看看有關該操作的官方解釋:

The BATCHED access shown in Step 1 means that the database retrieves a few rowids from the index, and then attempts to access rows in block order to improve the clustering and reduce the number of times that the database must access a block.

這句話的意思是說,該操作是數據庫爲了從索引中獲取一些rowid,接着,試着按照塊順序存取塊中的數據行,以便用來改善聚集效果和減少對一個數據塊存取的次數。

官方解釋的意思就是這樣,但怎麼理解呢?之前,當我們通過索引獲取的rowid回表獲取相應數據行時,都是讀一個rowid回表獲取一次相應數據行,然後,再讀一個rowid,再回表獲取一次相應數據行。。。,這樣一直讀取完所有所需數據。當不同rowid對應的數據行存儲在一個數據塊中時,就可能會發生對同一表數據塊的多次讀取,當一個索引的聚集因子比較低時,這也是一個必然結果,從而浪費了系統資源。Oracle 12c中該新特性,通過對rowid對應的數據塊號進行排序,然後回表讀取相應數據行,從而避免了對同一表數據塊的多次重複讀取,從而改善了SQL語句的性能,降低了資源消耗。該特性通過隱藏參數“_optimizer_batch_table_access_by_rowid”控制,默認值爲true,即爲開啓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章