SQL Server在執行SQL語句時,表之間驅動順序對性能的影響

来源:http://www.cnblogs.com/wy123/archive/2016/06/15/5584676.html
-Advertisement-
Play Games

環境:SQL Server2012 SP3 企業版,開發伺服器,並沒有什麼負載,全庫索引統一Rebuild過 經反覆執行驗證過, 不算太複雜的SQL(存儲過程中代入參數摳出來的SQL代碼) 預設情況下,執行完成需要3秒鐘 非要用紅色圈中子查詢中的表(是一個相關子查詢)去驅動其他表, 添加OPTION ...


環境:SQL Server2012 SP3 企業版,開發伺服器,並沒有什麼負載,全庫索引統一Rebuild過

 

經反覆執行驗證過,

不算太複雜的SQL(存儲過程中代入參數摳出來的SQL代碼)

 

 預設情況下,執行完成需要3秒鐘

 非要用紅色圈中子查詢中的表(是一個相關子查詢)去驅動其他表,

 

 

 添加OPTION(FORCE ORDER)後,強制連接順序,用其他表驅動子查詢,1秒鐘

 

  預設情況下:

        IO消耗的比較少(相比強制驅動順序),但是CPU消耗的比較多,但是整體時間的消耗比強制驅動順序要多

  強製表的驅動順序的時候:

        IO比預設情況下要多(相比預設情況下),但是,CPU消耗的比較少,整體上耗時較短

 

後記:

  我一直就懷疑一個問題,SQL Server內部評估執行計劃的時候,IO的權重要比其他的資源權重要大,

  不止一次兩次遇到類似問題了,

  總結起來發現一個規律:

  SQL Server總是“喜歡”選擇IO較小的執行方式去完成一個查詢,但是這個查詢方式,從時間上看,並不一定是最快

 

  雖然這裡沒有用某個例子證明Exists的使用“沒問題”或者“有問題”,但面對情況往往比較複雜的時候,

  Exists子查詢往往會引起意料之外的執行方式(執行計劃),越來越怕Exists子查詢了,像定時炸彈一樣,不知道什麼時候爆發

  說Exists子查詢會引起某些問題,而又沒有佐證,面對主觀意識比較強的人,可能會不高興,

  當然可以有人會拿出來100個case來證明exists子查詢沒有問題,但是我想說,遇到性能問題,還是註意點這個Exists子查詢,

  也是不止一次遇到它引起的問題了

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 在SQL Server中,我們所常見的表與表之間的Inner Join,Outer Join都會被執行引擎根據所選的列,數據上是否有索引,所選數據的選擇性轉化為Loop Join,Merge Join,Hash Join這三種物理連接中的一種。理解這三種物理連接是理解在表連接時解決性能問題的基 ...
  • 本文由作者林宸詳解互聯網思維,林宸是美國密歇根州立大學商學院助理教授,Emory大學市場營銷系博士,中歐國際工商學院訪問教授。本文有刪節,原文參見《哈佛商業評論》2014年9月《“互聯網思維”落地6方略》。 互聯網演變經歷了三個過程,即從Web1.0的門戶,到Web 2.0的搜索,再到今天Web3. ...
  • 一、環境準備 主機IP 主機名 操作系統版本 PXC 192.168.244.146 node1 CentOS7.1 Percona-XtraDB-Cluster-56-5.6.30 192.168.244.147 node2 CentOS7.1 Percona-XtraDB-Cluster-56- ...
  • 主鍵、超鍵、候選鍵、外鍵定義;三種約束;ER圖舉例;資料庫相關鏈接 ...
  • ...
  • 簡介 在上篇文章中我們談到了查詢優化器和執行計劃緩存的關係,以及其二者之間的衝突。本篇文章中,我們會主要闡述執行計劃緩存常見的問題以及一些解決辦法。 將執行緩存考慮在內時的流程 上篇文章中提到了查詢優化器解析語句的過程,當將計劃緩存考慮在內時,首先需要查看計劃緩存中是否已經有語句的緩存,如果沒有,才 ...
  • 第13章 可擴展性設計之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一個功能,他能夠將一個 MySQL Server 的 Instance 中的數據完整的複製到另外一個 MySQL Server 的 Instance 中。雖然複製過程 ...
  • 安裝SQL Server2016正式版 今天終於有時間安裝SQL Server2016正式版,下載那個安裝包都用了一個星期 安裝包可以從這裡下載: http://www.itellyou.cn/ https://msdn.microsoft.com/zh-cn/subscriptions/downl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...