Oracle12c開始,我們在獲取SQL語句的執(zhí)行計(jì)劃時(shí),也會(huì)經(jīng)??吹?TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,這個(gè)操作到底是什么意思呢?有什么作用呢?下面我們先看看有關(guān)該操作的官方解釋:
李滄網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,李滄網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為李滄近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的李滄做網(wǎng)站的公司定做!
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.
這句話的意思是說,該操作是數(shù)據(jù)庫為了從索引中獲取一些rowid,接著,試著按照塊順序存取塊中的數(shù)據(jù)行,以便用來改善聚集效果和減少對一個(gè)數(shù)據(jù)塊存取的次數(shù)。
官方解釋的意思就是這樣,但怎么理解呢?之前,當(dāng)我們通過索引獲取的rowid回表獲取相應(yīng)數(shù)據(jù)行時(shí),都是讀一個(gè)rowid回表獲取一次相應(yīng)數(shù)據(jù)行,然后,再讀一個(gè)rowid,再回表獲取一次相應(yīng)數(shù)據(jù)行。。。,這樣一直讀取完所有所需數(shù)據(jù)。當(dāng)不同rowid對應(yīng)的數(shù)據(jù)行存儲(chǔ)在一個(gè)數(shù)據(jù)塊中時(shí),就可能會(huì)發(fā)生對同一表數(shù)據(jù)塊的多次讀取,當(dāng)一個(gè)索引的聚集因子比較低時(shí),這也是一個(gè)必然結(jié)果,從而浪費(fèi)了系統(tǒng)資源。Oracle 12c中該新特性,通過對rowid對應(yīng)的數(shù)據(jù)塊號進(jìn)行排序,然后回表讀取相應(yīng)數(shù)據(jù)行,從而避免了對同一表數(shù)據(jù)塊的多次重復(fù)讀取,從而改善了SQL語句的性能,降低了資源消耗。該特性通過隱藏參數(shù)“_optimizer_batch_table_access_by_rowid”控制,默認(rèn)值為true,即為開啟。