了解Sql Server的執行計畫

2021-09-08 05:29:05 字數 2238 閱讀 2068

閱讀目錄

前一篇總結了sql server profiler,它主要用來監控資料庫,並跟蹤生成的sql語句。但是只拿到生成的sql語句沒有什麼用,我們可以利用這些sql語句,然後結合執行計畫來分析sql語句的效能問題,這才是我們的最終目的,那麼如何使用執行計畫呢?我準備從以下幾點來總結。

如何啟動執行計畫

執行計畫結果要看什麼

sql server的五種查詢方式

檢視更具體的執行過程

回到頂部

執行一條sql,並且在工具欄中選中'include actual execution plan'按鈕,此時就啟動了執行計畫,如下圖。

sql語句:  

usetsqlfundamentals2008;

go--查詢2023年7月1日到2023年7月31日的所有訂單,並按requireddate欄位排序

select orderid,orderdate,requireddate,shippeddate,shipname,shipaddress fromsales.orders where orderdate>='20060701' and orderdate

執行查詢,可以在結果欄中看到執行計畫結果,如下圖。

回到頂部

執行計畫結果出來了,那我們要怎麼看呢?一般我們只需關注以下幾個引數。

哪一步開銷較高。開銷較高的地方說明這個地方查詢比較耗時。

哪些步驟所影響的資料行較多。這個可以通過連線線條的粗細來判斷。

每一步做了些什麼事情。

回到頂部

要了解sql server的五種查詢方式之前,我們要弄明白兩個概念,sql server中的兩種索引,聚集索引和非聚集索引。【聚集索引】直接決定了記錄的存放位置,或者說,根據聚集索引可以直接獲取到該記錄,一般我們表的主鍵都是用聚集索引。【非聚集索引】則儲存了二個資訊,1.相應索引欄位的值。2.記錄對應聚集索引的位置(如果表沒有聚集索引則儲存記錄指標)。因此,如果能通過聚集索引來查詢記錄,則速度是最快的。

下面是sql server查詢資料的五種方式,這對我們理解執行計畫非常重要。五種方式如下。

【table scan】:遍歷整個表來查詢匹配的資料行,速度最慢。

【index scan】:依據索引先從表中過濾出一部分記錄,然後再查詢所有匹配的資料行。查詢速度比table scan稍快。

【index seek】:依據索引,定位記錄的存放位置,然後再取得記錄,因此,其查詢速度比前面兩種都快。

【clustered index scan】:按聚集索引(一般是主鍵)遍歷整個表,因為它的記錄就是按聚集索引來順序存放的。注意它與table scan的區別,其實它們都是進行全表掃瞄,只不過table scan是不帶索引的掃瞄,而clustered index scan是按聚集索引掃瞄的。

【clustered index seek】:聚集索引獲取記錄,它是直接拿到那條記錄,而沒有進行全表掃瞄,因此它的查詢速度是最快的。

當我們檢視執行計畫結果的時候,如果看到【table scan】,說明這個表沒有建立任何索引,包括聚集索引。但往往看到更多的是【clustered index scan】,表示該查詢還是掃瞄了速個表,只不過是按聚集索引,實際效果還是和【table scan】沒什麼區別,因此,這時候我們可能要考慮建立'組合字段索引'。

回到頂部

能過執行計畫的結果圖我們只能看出哪一塊比較耗時,但是看不到sql server具體是怎麼執行的。為了看得更明白,我們可以通過一條sql命令來檢視,如下**。

set statistics profile on;

執行結果除了返回資料集和執行計畫外,還返回了乙個表顯示具體的執行過程,如下圖。

這個結果我們重點要關注以下幾點:

stmt text:所執行的步驟詳細描述,一般從最內層往外看。

rows:表示該執行步驟所產生的記錄數。

executes:表示某執行步驟被執行的記錄數。

回到頂部

1,fish li的 看懂sqlserver查詢計畫

2,田園裡的蟋蟀的 程式設計師眼中的 sql server-執行計畫教會我如何建立索引?

如何為執行在SAP的SQL Server計畫效能

我如何為執行在sap上的sql server計畫效能?問 我們想要為我們的資料庫安裝儲存區域網路 san 整個的資料庫尺寸 mdf 將會在下面的兩年裡面增長到200gb,而整個日誌檔案尺寸 ldf 不會超過50gb。tempdb大概是在10到15個gb。答 我將會使用你的建議從效能的角度來判斷以下的...

對Sql Server執行計畫的淺顯了解。

一名大三的小學生,今天開始我的第一篇部落格,最近隨便做了乙個簡易的酒店管理系統,對sql執行計畫有了初步的了解。檢視上面語句的預估執行計畫,在工具欄中有這個按鈕 聚集索引掃瞄被稱為index scan,這是需要掃瞄全表。聚集索引查詢英文是index seek.這個就不需要掃瞄表,而是根據索引定位。我...

mysql 生成執行計畫 MySQL的執行計畫

mysql的執行計畫 什麼是執行計畫?執行計畫通常是開發者優化sql語句的第一步。mysql在解析sql語句時,會生成多套執行方案,然後內部會進行乙個成本的計算,然後通過優化器選擇乙個最優的方案執行,然後根據這個方案會生成乙個執行計畫。開發者通過檢視sql語句的執行計畫,可以直觀的了解到mysql是...