在開發與維護資料庫的日常中,會遇到這樣的場景,一段 SQL 查詢平常跑得順順的,卻突然卡住,或者明明加了 WHERE 條件,資料庫卻慢到讓人想打電腦。
面對效能瓶頸,可以打開 SQL Server 提供的導航地圖「執行計畫」(Execution Plan),執行計畫是 SQL Server 查詢最佳化工具(Query Optimizer)的詳細報告,然而,初次見到這張充滿各種圖示與線條的圖表時,往往是讓人眼花撩亂,不知所措。
閱讀方向:從右到左、從上到下
在解讀 SQL Server 的圖形化執行計畫時,閱讀順序是:從右到左、從上到下。
- 最右邊的節點(起點): 代表「資料的來源」。這裡通常是實體資料表(Tables)或是索引(Indexes)。這是 SQL Server 第一步要去硬碟或記憶體裡把基礎資料撈出來的地方。
- 中間的節點(過程): 每個圖示都代表一個「處理步驟」(Operator),例如:關聯(Join)、排序(Sort)、過濾(Filter)或群組化(Aggregate)。
- 最左邊的節點(終點): 代表「最終的輸出」。通常會是一個
SELECT、INSERT、UPDATE或DELETE的圖示,表示這段查詢最後呈現給應用程式的結果。 - 從上到下: 當一個步驟需要結合多個資料來源(例如
Join兩張表)時,通常在圖形上方的分支會先被執行或作為外部輸入(Outer Input),下方的分支則作為內部輸入(Inner Input)。
下次打開 Plan 時,將目光移到畫面的最右端,看看 SQL Server 是從哪些表開始動手的而非一開始就盯著最左邊的 SELECT 看。
解讀箭頭的「粗細」

紅框:漏斗效應、綠框:一路粗到底
在各個節點之間,會看到許多連接的箭頭。這些箭頭不僅僅是指出資料流動的方向,它們還隱藏著極其重要的效能指標,箭頭的粗細,代表著傳遞的資料列數(Rows)多寡。
- 極細的箭頭: 代表經過這個步驟後,只傳遞了非常少量的資料(甚至只有 1 筆)。
- 非常粗的箭頭: 代表這裡有龐大的資料量正在兩個節點之間搬運。
掌握了箭頭粗細的含義,就能在幾秒鐘內靠「視覺」找出潛在的問題點:
- 漏斗效應(粗進細出): 如果看到一個節點,右邊進來的箭頭非常粗,但左邊出去的箭頭突然變得很細。這代表 SQL Server 在這個步驟(可能是一個 Filter 或 Hash Match)花費了巨大的力氣,過濾掉成千上萬筆不符合條件的資料,最後只留下幾筆,這通常是強烈的優化訊號,告訴我們「資料需要從源頭就開始進行篩選,而非把一堆資料搬進記憶體裡慢慢濾」。
- 一路粗到底: 如果從最右邊到最左邊,箭頭始終粗得像水管一樣。這意味著你的查詢確實要回傳海量資料。這時你可以問應用程式端:「我們真的需要一次 SELECT 幾百萬筆資料出來嗎?能不能做分頁處理?」
閱讀 Execution Plan 最重要,就是建立「方向感」,只要掌握了正確的閱讀方向,就不會在複雜的 Plan 裡迷失。從「由右至左找源頭」以及「看箭頭粗細找瓶頸」這兩個導航法則,就能在面對那張複雜的網路圖時,擁有清晰的解讀脈絡,而當我們知道資料是從哪裡來,又在哪裡塞車之後,下一步就是要檢視 SQL Server 到實體表中「拿資料」的手法是否夠聰明了。
~下一篇見~













