SQL Server 效能調校之一:不迷路的導航,Execution Plan 的閱讀方向與指標

更新 發佈閱讀 4 分鐘

在開發與維護資料庫的日常中,會遇到這樣的場景,一段 SQL 查詢平常跑得順順的,卻突然卡住,或者明明加了 WHERE 條件,資料庫卻慢到讓人想打電腦。

面對效能瓶頸,可以打開 SQL Server 提供的導航地圖「執行計畫」(Execution Plan),執行計畫是 SQL Server 查詢最佳化工具(Query Optimizer)的詳細報告,然而,初次見到這張充滿各種圖示與線條的圖表時,往往是讓人眼花撩亂,不知所措。

閱讀方向:從右到左、從上到下

在解讀 SQL Server 的圖形化執行計畫時,閱讀順序是:從右到左、從上到下。

  • 最右邊的節點(起點): 代表「資料的來源」。這裡通常是實體資料表(Tables)或是索引(Indexes)。這是 SQL Server 第一步要去硬碟或記憶體裡把基礎資料撈出來的地方。
  • 中間的節點(過程): 每個圖示都代表一個「處理步驟」(Operator),例如:關聯(Join)、排序(Sort)、過濾(Filter)或群組化(Aggregate)。
  • 最左邊的節點(終點): 代表「最終的輸出」。通常會是一個 SELECTINSERTUPDATEDELETE 的圖示,表示這段查詢最後呈現給應用程式的結果。
  • 從上到下: 當一個步驟需要結合多個資料來源(例如 Join 兩張表)時,通常在圖形上方的分支會先被執行或作為外部輸入(Outer Input),下方的分支則作為內部輸入(Inner Input)。

下次打開 Plan 時,將目光移到畫面的最右端,看看 SQL Server 是從哪些表開始動手的而非一開始就盯著最左邊的 SELECT 看。

解讀箭頭的「粗細」

紅框:漏斗效應、綠框:一路粗到底

紅框:漏斗效應、綠框:一路粗到底

在各個節點之間,會看到許多連接的箭頭。這些箭頭不僅僅是指出資料流動的方向,它們還隱藏著極其重要的效能指標,箭頭的粗細,代表著傳遞的資料列數(Rows)多寡。

  • 極細的箭頭: 代表經過這個步驟後,只傳遞了非常少量的資料(甚至只有 1 筆)。
  • 非常粗的箭頭: 代表這裡有龐大的資料量正在兩個節點之間搬運。

掌握了箭頭粗細的含義,就能在幾秒鐘內靠「視覺」找出潛在的問題點:

  • 漏斗效應(粗進細出): 如果看到一個節點,右邊進來的箭頭非常粗,但左邊出去的箭頭突然變得很細。這代表 SQL Server 在這個步驟(可能是一個 Filter 或 Hash Match)花費了巨大的力氣,過濾掉成千上萬筆不符合條件的資料,最後只留下幾筆,這通常是強烈的優化訊號,告訴我們「資料需要從源頭就開始進行篩選,而非把一堆資料搬進記憶體裡慢慢濾」。
  • 一路粗到底: 如果從最右邊到最左邊,箭頭始終粗得像水管一樣。這意味著你的查詢確實要回傳海量資料。這時你可以問應用程式端:「我們真的需要一次 SELECT 幾百萬筆資料出來嗎?能不能做分頁處理?」

閱讀 Execution Plan 最重要,就是建立「方向感」,只要掌握了正確的閱讀方向,就不會在複雜的 Plan 裡迷失。從「由右至左找源頭」以及「看箭頭粗細找瓶頸」這兩個導航法則,就能在面對那張複雜的網路圖時,擁有清晰的解讀脈絡,而當我們知道資料是從哪裡來,又在哪裡塞車之後,下一步就是要檢視 SQL Server 到實體表中「拿資料」的手法是否夠聰明了。

~下一篇見~

留言
avatar-img
愷的大冒險 Kai's Adventure
6會員
18內容數
這裡記錄軟體工程相關工具、技能與學習的探索歷程,偶爾分享角落生物的美好日常,希望能透過文字與更多人交流,如果你對這些主題感興趣歡迎留言,讓我們一起碰撞出更多火花!
2026/05/05
承續上篇 OpenCode 搭配 OpenRouter 的踩坑紀錄:意外的模型扣費之謎,在今日反覆測試之後,終於找到了初步的解決之道。
Thumbnail
2026/05/05
承續上篇 OpenCode 搭配 OpenRouter 的踩坑紀錄:意外的模型扣費之謎,在今日反覆測試之後,終於找到了初步的解決之道。
Thumbnail
2026/05/04
今天在開發時,遇到了一個有趣但也讓人有點困擾的狀況。我目前的開發環境是使用 OpenCode 搭配 OpenRouter,主模型則是透過 OpenRouter BYOK (Bring Your Own Key) 綁定 Google AI Studio API Key 的 Google Gemini
Thumbnail
2026/05/04
今天在開發時,遇到了一個有趣但也讓人有點困擾的狀況。我目前的開發環境是使用 OpenCode 搭配 OpenRouter,主模型則是透過 OpenRouter BYOK (Bring Your Own Key) 綁定 Google AI Studio API Key 的 Google Gemini
Thumbnail
2026/04/28
每個團隊都有這種東西,一份跑了好幾年的報表、一段沒人敢動的邏輯、一個只有某一個人真正懂的模組。功能正常,但知識只活在原始碼裡,或者更糟,只活在某個人的腦袋裡,這不是技術債,這是知識債,而且會隨著時間默默利滾利。
Thumbnail
2026/04/28
每個團隊都有這種東西,一份跑了好幾年的報表、一段沒人敢動的邏輯、一個只有某一個人真正懂的模組。功能正常,但知識只活在原始碼裡,或者更糟,只活在某個人的腦袋裡,這不是技術債,這是知識債,而且會隨著時間默默利滾利。
Thumbnail
看更多
你可能也想看
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
Thumbnail
本篇文章是作者自學 SQL 的筆記,詳述資料庫中的四種主要語言類別:DDL、DML、TCL 及 DCL,每類別對應的功能與常見操作一一列舉,並深入探討交易的特性及其 ACID 原則。此外,文章還解釋了資料庫的正規化及反正規化的必要性,對於學習 SQL 的讀者有很大的幫助。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News