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

sqysl發表於2018-02-10

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,即為開啟。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2150999/,如需轉載,請註明出處,否則將追究法律責任。

相關文章