如何閱讀執行計畫

2021-09-26 05:12:15 字數 1154 閱讀 6228

今天我想談下乙個非常「簡單」的話題:如何閱讀執行計畫。首先,這個看起來是非常簡單的問題,但是當你看看的答案的細節時,它可是令人驚奇的。有2種方式閱讀執行計畫——從右到左,和從左到右。我們來詳細看下,哪個才是正確的……

在sql server裡,當你開始和執行計畫打交道時,你總聽到推薦:你應該從右到左閱讀執行計畫。但是為什麼呢?我們看書,雜誌,報紙都是從左到右,現在我們閱讀執行計畫應該從右到左?首先這看起來就不太合理。但當你知道在查詢執行期間發生了什麼,從右到左的方法就更合理了。

sql server內部為查詢執行使用所謂的迭代器模式(iterator model)。在執行計畫裡每個運算子內部是個c++類,把行傳個下乙個前面的運算子。因此在執行計畫裡結果資料流總是從右到左的,如你在下圖裡看到的。

因此從右到左閱讀執行計畫非常合理,因為你跟著執行計畫的資料流走。我經常告訴人們首先專注下執行計畫的右手邊,因為那是所有問題的發源地:你通過索引資料結構訪問你的資料。如果你看到有在大表上進行掃瞄操作,你該馬上知道你要調整下你的索引設計。

另乙個閱讀執行計畫的方法是從左到右。但從上一部分的你會發現,這個真的不合理,因為執行計畫裡資料流是從右到左的。那什麼情況下從左到右閱讀執行計畫才合理呢?這個看情況……

我們來仔細看下為什麼說這個是看情況。我剛才提過對於執行計畫,sql server內部使用迭代器模式。每個運算子從右邊的運算子請求行,右邊的運算子又返回行給左邊。因為執行計畫物理上還是從左到右執行的。我們來看下面的。

在圖里第1個運算子從第2個例請求行,第2個從第3個請求行,最後第3個運算子返回行給第2個,地2個運算子返回行給第1個。執行計畫物理上是從左到右,資料流是從右到左的。順便說下,執行計畫裡有部分是可能從未被執行的(巢狀分割槽檢視),還有在執行計畫裡,掃瞄運算子可以被縮短,因此掃瞄不一定總是掃瞄。

如果你問別人如何閱讀執行計畫,那沒有錯的答案。你可以從右到左讀,也可以從左到右讀。2個方法都有它們的優缺點。一般我建議從右到左閱讀之星計畫,因為到時你會跟著邏輯資料流,它會幫助你找到在哪方面因為大量行而有效能問題。

感謝關注!

如何檢視執行計畫

如果plan table表不存在,執行 oracle home rdbms admin utlxplan.sql建立plan table表。1.explain plan forselect from 2.select from table dbms xplan.display 二.使用oracle第...

如何讀懂執行計畫

1 執行計畫概念 乙個執行計畫描述了一段sql語句建議的執行方法,該 計畫顯示oracle資料庫的執行sql時步驟的組合。每一步都得到資料庫中的物理資料行戒準備為他們的 使用者發布的宣告 2 生成執行計畫 使用語句生成 explain plan forselect from ods employe ...

如何檢視執行計畫以及執行計畫的準

如何檢視執行計畫以及執行計畫的準確性 很多朋友都問過我優化sql的事情。我覺得在我不斷地鼓勵下,很多朋友現在都知道優化sql之前要先看看執行計畫,也在優化中獲得了很多快樂。但是今天有人問我執行計畫應該怎麼看。我覺得這是個值得寫一寫的東西。先告訴大家乙個原則,看執行計畫的時候,從第一行開始向右下看,一...