溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle執(zhí)行計劃的方法是什么

發(fā)布時間:2021-11-03 09:19:05 來源:億速云 閱讀:169 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容主要講解“oracle執(zhí)行計劃的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“oracle執(zhí)行計劃的方法是什么”吧!

先從最開頭一直往右看,直到看到最右邊的并列的地方,對于不并列的,靠右的先執(zhí)行:對于并列的,靠上的先執(zhí)行。

      即并列的縮進塊,從上往下執(zhí)行,非并列的縮進塊,從下往上執(zhí)行。

如下示例:

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   NESTED LOOPS

   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)

   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

不妨假設(shè)最右邊的數(shù)據(jù)為行號,語句執(zhí)行是按塊進行的。

從上述執(zhí)行計劃的開頭一直往右看,直到找到最右邊并列的。也就是從SELECT STATEMENT開始往右找。

找到一級縮進塊,只有一個,沒有優(yōu)先級可言,如下:

   1    0   NESTED LOOPS

   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)

   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

再在一級縮進塊中找二級縮進塊,找到兩個,如下:

   第一個二級縮進塊:

   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)

   第二個二級縮進塊:

   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

按照并列塊從上往下執(zhí)行的原則,第一個二級縮進塊的所有語句將優(yōu)先于第二個二級縮進塊的語句執(zhí)行。

而兩個二級縮進塊執(zhí)行完,才能執(zhí)行一級縮進塊,這是因為非并列的縮進塊,從下往上執(zhí)行。

再在二級縮進塊中找三級縮進塊。

第一個二級縮進塊中只有一個三級縮進塊,如下:

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)

由于沒有更低層級的縮進塊,因此,該塊最先執(zhí)行。然后執(zhí)行二級縮進塊。

第二個二級縮進塊中也只有一個三級縮進塊,如下:

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

二級縮進塊中沒有更低層次的縮進塊了,因此,執(zhí)行完第一個二級縮進塊的所有語句后,便執(zhí)行此三級縮進塊,再執(zhí)行對應(yīng)的二級縮進塊。

兩個二級縮進塊均執(zhí)行完成后,再執(zhí)行整個一級縮進塊。

因此,若按行排序,語句的執(zhí)行順序便是: 3 -> 2 -> 5 -> 4 -> 1, 即:

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)   ->

   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'           ->

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)               ->

   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'          ->

   1    0   NESTED LOOPS

執(zhí)行計劃順序的理論解釋:

執(zhí)行計劃是按一定規(guī)則顯示的,如下:

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   NESTED LOOPS

   2    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL'

   3    2       INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE)

   4    1     TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL'

   5    4       INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE)

第一個列是步驟的ID (相當于我們說的行號)

第二個列是父步驟的ID 

第三個列是該步驟要進行的操作。

在執(zhí)行過程中,父步驟依賴于子步驟。只有對應(yīng)的所有子步驟執(zhí)行完,才能執(zhí)行父步驟。

因此,步驟0的子步驟為1, 步驟1的子步驟為2,4, 步驟2子步驟為3,步驟4的子步驟為5, 步驟3,5沒有子步驟了。

故步驟3所在的模塊,或步驟5所在的模塊先執(zhí)行。但步驟3排在步驟5的前面,故步驟3所在的模塊先執(zhí)行。因此,順序仍是:

3 -> 2 -> 5 -> 4 -> 1

到此,相信大家對“oracle執(zhí)行計劃的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI