国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

了解Sql Server的執(zhí)行計劃

2024-08-31 00:55:02
字體:
供稿:網(wǎng)友
了解Sql Server的執(zhí)行計劃

  前一篇總結(jié)了Sql Server PRofiler,它主要用來監(jiān)控數(shù)據(jù)庫,并跟蹤生成的sql語句。但是只拿到生成的sql語句沒有什么用,我們可以利用這些sql語句,然后結(jié)合執(zhí)行計劃來分析sql語句的性能問題,這才是我們的最終目的,那么如何使用執(zhí)行計劃呢?我準(zhǔn)備從以下幾點來總結(jié)。

  1. 如何啟動執(zhí)行計劃
  2. 執(zhí)行計劃結(jié)果要看什么
  3. Sql Server的五種查找方式
  4. 查看更具體的執(zhí)行過程
如何啟動執(zhí)行計劃

  運行一條sql,并且在工具欄中選中'Include Actual Execution Plan'按鈕,此時就啟動了執(zhí)行計劃,如下圖。

  

  Sql語句:  

USE TSQLFundamentals2008;GO-- 查詢2006年7月1日到2007年7月31日的所有訂單,并按requireddate字段排序SELECT orderid,orderdate,requireddate,shippeddate,shipname,shipaddress FROM Sales.OrdersWHERE orderdate>='20060701' AND orderdate<'20070801'ORDER BY requireddate;

  執(zhí)行查詢,可以在結(jié)果欄中看到執(zhí)行計劃結(jié)果,如下圖。

  

執(zhí)行計劃結(jié)果要看什么

  執(zhí)行計劃結(jié)果出來了,那我們要怎么看呢?一般我們只需關(guān)注以下幾個參數(shù)。

  1. 哪一步開銷較高。開銷較高的地方說明這個地方查詢比較耗時。
  2. 哪些步驟所影響的數(shù)據(jù)行較多。這個可以通過連接線條的粗細(xì)來判斷。
  3. 每一步做了些什么事情。
Sql Server的五種查詢方式

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

  下面是Sql Server查詢數(shù)據(jù)的五種方式,這對我們理解執(zhí)行計劃非常重要。五種方式如下。

  1. 【Table Scan】:遍歷整個表來查找匹配的數(shù)據(jù)行,速度最慢。
  2. 【Index Scan】:依據(jù)索引先從表中過濾出一部分記錄,然后再查找所有匹配的數(shù)據(jù)行。查詢速度比Table Scan稍快。
  3. 【Index Seek】:依據(jù)索引,定位記錄的存放位置,然后再取得記錄,因此,其查詢速度比前面兩種都快。
  4. 【Clustered Index Scan】:按聚集索引(一般是主鍵)遍歷整個表,因為它的記錄就是按聚集索引來順序存放的。注意它與Table Scan的區(qū)別,其實它們都是進行全表掃描,只不過Table Scan是不帶索引的掃描,而Clustered Index Scan是按聚集索引掃描的。
  5. 【Clustered Index Seek】:聚集索引獲取記錄,它是直接拿到那條記錄,而沒有進行全表掃描,因此它的查詢速度是最快的。

  當(dāng)我們查看執(zhí)行計劃結(jié)果的時候,如果看到【Table Scan】,說明這個表沒有建立任何索引,包括聚集索引。但往往看到更多的是【Clustered Index Scan】,表示該查詢還是掃描了速個表,只不過是按聚集索引,實際效果還是和【Table Scan】沒什么區(qū)別,因此,這時候我們可能要考慮建立'組合字段索引'。

查看更具體的執(zhí)行過程

  能過執(zhí)行計劃的結(jié)果圖我們只能看出哪一塊比較耗時,但是看不到Sql Server具體是怎么執(zhí)行的。為了看得更明白,我們可以通過一條sql命令來查看,如下代碼。

SET STATISTICS PROFILE ON;

  執(zhí)行結(jié)果除了返回數(shù)據(jù)集和執(zhí)行計劃外,還返回了一個表顯示具體的執(zhí)行過程,如下圖。

  這個結(jié)果我們重點要關(guān)注以下幾點:

  1. Stmt Text:所執(zhí)行的步驟詳細(xì)描述,一般從最內(nèi)層往外看。
  2. Rows:表示該執(zhí)行步驟所產(chǎn)生的記錄數(shù)。
  3. Executes:表示某執(zhí)行步驟被執(zhí)行的記錄數(shù)。
參考資料

1,F(xiàn)ish Li的看懂SqlServer查詢計劃

2,田園里的蟋蟀的程序員眼中的 SQL Server-執(zhí)行計劃教會我如何創(chuàng)建索引?


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江油市| 临潭县| 长沙县| 武穴市| 钦州市| 商河县| 潮安县| 唐山市| 滦平县| 安丘市| 印江| 虎林市| 禹州市| 襄垣县| 安多县| 明水县| 青岛市| 清水河县| 丽水市| 巫溪县| 孝感市| 延吉市| 漳平市| 鄢陵县| 盈江县| 扬中市| 万州区| 磐石市| 崇文区| 鄂伦春自治旗| 东乡县| 崇礼县| 阿荣旗| 商河县| 获嘉县| 沁源县| 武夷山市| 昭通市| 泗阳县| 报价| 丰县|