歡迎回到效能調優培訓。今天標誌著第3個月的培訓開始了,這個月我們全部學習sql server裡的執行計畫。執行計畫在sql server裡是你需要理解的,最重要的概念,對它做出有效的調整,就可以提高查詢效能。因此今天我會大致介紹下sql server裡的執行計畫,還有你如何讀懂它們。
很多人經常問我在sql server裡為什麼需要執行計畫。我們已經有了sql server的查詢,但為什麼sql server還需要執行計畫呢?為什麼sql server不自己執行查詢呢?為了回答那個問題,我們需要進一步討論下sql語言。sql語言(在sql server也叫做t-sql)是乙個解釋性的語言(declarative language)。你用一種邏輯的方式介紹從你資料庫想要的資料(select查詢),或者在你資料裡你想要修改的資料(insert, update, delete查詢)。就看下下面的查詢。
1在那個查詢裡,你告訴資料庫:select a.*, b.*
froma2
inner
join b on a.id =
b.id
3where a.x =
'somevalue
'
你想要從表a和表b獲取資料
2個表需要通過id列進行連線
表a裡的行需要在x列上進行過濾
你通過sql語句來描述資料庫的查詢結果是什麼樣的。用sql語句你只指出結果,沒其他任何資訊。你沒有告訴sql server如何執行這個查詢,即獲取資料的流程。
你總是和sql server以邏輯的方式打交道,描述下你想要獲取的資料,或者你想要修改的資料。但是sql server本身是需要乙個實際
執行計畫來描述如何獲取或修改資料的步驟。這個執行計畫就是被稱為查詢優化器(query optimizer)拿來處理你sql查詢的策略。
這是我們現實生活的華麗重現:想下你要從乙個城市到另乙個城市旅遊。例如你想從倫敦到巴黎旅遊,你就定義了乙個邏輯描述。當然,那個邏輯描述可以有多個實現方式:
選擇哪個並不重要,其實這裡有很多不同的組合方式。你的旅行方式就會非常多。你肯定會選擇成本關聯最低的方式:坐飛機直達。在sql server裡的查詢優化器也做著同樣的工作:查詢優化器會選擇滿足你查詢最省力的執行計畫。對於查詢優化器的挑戰就是:從查詢空間(search space)裡,找到足夠好(good enough)的執行計畫!查詢空間就是在你查詢裡涉及到的大量表和索引。
第一次接觸到執行計畫時,你會碰到很多困難:你不能正確理解和讀懂它們。來看下下面的執行計畫:
從上圖可以看到,每個執行計畫包含很多步,在sql server裡被稱為運算子(operator)。這些運算子被sql server逐個呼叫。這就是說在執行計畫裡,運算子的執行流是從右到左的(從上到下)。
這裡的sql server執行的第一步是:在address表上的索引查詢(非聚集索引)(index seek(non clustered))運算子。從掃瞄回來的每條記錄進入巢狀迴圈(nested loop)運算子(一種書籤查詢)。如果有匹配的行,這行就會傳給select運算子,即把最終結果返回給程式。
從上面的描述,我們可以看到,剛開始閱讀執行計畫時,從右往左更容易,因為在執行計畫裡,資料也是這樣流的。執行計畫實際上也是從右往左執行的。當我們從右到左跟著資料時,我們是在一種邏輯的方式閱讀執行計畫。
希望這種方式可以更好的幫你理解如何讀懂執行計畫。如果你想看看在sql server裡,執行計畫支援哪些運算子,我推薦fabiano amorim的免費電子書《complete showplan operators (pdf)》。
這期的效能調優培訓,我們弄清楚了sql server為什麼需要執行計畫,還有如何讀懂執行計畫。如你所看到的,我們和sql server是以邏輯的方式打交道:我們通過sql查詢描述資料庫裡我們想要的資料,或者我們想要修改的資料。
0720_09_理解執行計畫.rar
詳解執行計畫
執行計畫的閱讀順序為,從右到左,從上到下。由執行計畫表示的查詢執行的一些特徵如下 執行計畫中令人感興趣的主要是查詢哪些步驟相對開銷較大。這些步驟是查詢優化的出發點。可以通過採用下面的技術來選擇開始的步驟。為了進一步研究執行計畫中的開銷較大的步驟,應該分析相關表或索引的資料檢索機制。首先,應該檢查索引...
詳解執行計畫
執行計畫的閱讀順序為,從右到左,從上到下。由執行計畫表示的查詢執行的一些特徵如下 執行計畫中令人感興趣的主要是查詢哪些步驟相對開銷較大。這些步驟是查詢優化的出發點。可以通過採用下面的技術來選擇開始的步驟。為了進一步研究執行計畫中的開銷較大的步驟,應該分析相關表或索引的資料檢索機制。首先,應該檢查索引...
詳解執行計畫
原文 詳解執行計畫 執行計畫的閱讀順序為,從右到左,從上到下。由執行計畫表示的查詢執行的一些特徵如下 執行計畫中令人感興趣的主要是查詢哪些步驟相對開銷較大。這些步驟是查詢優化的出發點。可以通過採用下面的技術來選擇開始的步驟。為了進一步研究執行計畫中的開銷較大的步驟,應該分析相關表或索引的資料檢索機制...