日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

了解Sql Server的执行计划

發(fā)布時(shí)間:2025/3/13 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解Sql Server的执行计划 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

  • 如何啟動(dòng)執(zhí)行計(jì)劃
  • 執(zhí)行計(jì)劃結(jié)果要看什么
  • Sql Server的五種查找方式
  • 查看更具體的執(zhí)行過程
  • 如何啟動(dòng)執(zhí)行計(jì)劃

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

      

      Sql語句:  

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

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

      

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

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

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

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

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

  • 【Table Scan】:遍歷整個(gè)表來查找匹配的數(shù)據(jù)行,速度最慢。
  • 【Index Scan】:依據(jù)索引先從表中過濾出一部分記錄,然后再查找所有匹配的數(shù)據(jù)行。查詢速度比Table Scan稍快。
  • 【Index Seek】:依據(jù)索引,定位記錄的存放位置,然后再取得記錄,因此,其查詢速度比前面兩種都快。
  • 【Clustered Index Scan】:按聚集索引(一般是主鍵)遍歷整個(gè)表,因?yàn)樗挠涗浘褪前淳奂饕齺眄樞虼娣诺摹W⒁馑cTable Scan的區(qū)別,其實(shí)它們都是進(jìn)行全表掃描,只不過Table Scan是不帶索引的掃描,而Clustered Index Scan是按聚集索引掃描的。
  • 【Clustered Index Seek】:聚集索引獲取記錄,它是直接拿到那條記錄,而沒有進(jìn)行全表掃描,因此它的查詢速度是最快的。
  •   當(dāng)我們查看執(zhí)行計(jì)劃結(jié)果的時(shí)候,如果看到【Table Scan】,說明這個(gè)表沒有建立任何索引,包括聚集索引。但往往看到更多的是【Clustered Index Scan】,表示該查詢還是掃描了速個(gè)表,只不過是按聚集索引,實(shí)際效果還是和【Table Scan】沒什么區(qū)別,因此,這時(shí)候我們可能要考慮建立'組合字段索引'。

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

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

    SET STATISTICS PROFILE ON;

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

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

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

    1,Fish Li的?看懂SqlServer查詢計(jì)劃

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

    轉(zhuǎn)載于:https://www.cnblogs.com/mcgrady/p/4174185.html

    總結(jié)

    以上是生活随笔為你收集整理的了解Sql Server的执行计划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。