Sql效能優化總結(續)- sql語句優化篇

来源:http://www.cnblogs.com/shouce/archive/2016/04/11/5376983.html
-Advertisement-
Play Games

今晚繼續進行Sql效能問題的分享,今天主要是一些具體的sql優化方法和思路分享,若看過後你也有其他想法,歡迎一起探討,好了,進入今天的主題。 針對性地對一些耗資源嚴重的具體應用進行優化 出現效能問題時,首先要做的是什麼?這個問題我問過不少同事,有人說憑經驗對出問題的sql進行優化,如我們一般說的要合 ...


今晚繼續進行Sql效能問題的分享,今天主要是一些具體的sql優化方法和思路分享,若看過後你也有其他想法,歡迎一起探討,好了,進入今天的主題。

 

針對性地對一些耗資源嚴重的具體應用進行優化

 

出現效能問題時,首先要做的是什麼?這個問題我問過不少同事,有人說憑經驗對出問題的sql進行優化,如我們一般說的要合理使用索引,儘量不要使用前面帶*號的Like語句,不要再比較操作符前邊進行計算或使用函數等等,這些道路都是對的,但經驗有時候不一定能解決問題。問題出現時,首先要做的是確定問題點是什麼,只有正確的找到問題後才能有針對性的解決問題。下麵簡單介紹我們一般從哪些角度入手,來確定問題所在。

 

1.首先從業務上理解該處功能,理解用戶的真正意圖,用戶真正關註的是什麼,想要的是什麼數據,是否有變通簡潔的方法達到用戶要求。而非使用複雜sql查詢。其實有些時候進行變通的修改,同樣能達到目的,但是採用的sql語句已經極大地簡化了。這是解決效能問題的優先要考慮的。

 

2.對固定的sql進行優化時,一定要關註查詢相關的數據量,關註數據量的大小,有些時候用戶進行一個查詢,若沒有處理好查詢條件的話,返回的記錄集合太大,這對用戶來說,其實意義不大,關鍵是這樣必然會導致較多的磁碟IO,效能問題是必然的。除非是用戶真的需要這麼多數據,但事實證明,多數都不是的,所以著眼點是怎樣限制返回的記錄集的大小或查詢中使用的臨時中間數據集合的大小。這樣才能使你的優化達到效果,起到作用。

下麵簡單介紹幾種常用的檢查問題sql的方法。

 

當然其中是有些技巧的,如:

  1. 使用 set statistics io on 檢查實際的磁碟IO信息,物理讀、邏輯讀等信息,這個是一個簡單有效的參考數據,在筆者以往的經驗中,也是主要的參考數據。

 

在查詢分析器中貼出問題sql,使用set statistics io  為on,也可以在空白處點擊右鍵,選擇<查詢選項>,

選擇<高級>

勾選Set Statistics Io 。

 

運行查詢,除了得到結果集合以外,還可以得到本次查詢相關的IO信息,如下圖:

我們一般關註邏輯讀的次數,當多個表聯合查詢時,這裡會現時每一個表的IO信息,當某個表的邏輯讀的次數很大時,你就要重點關註和分析這個表了,是不是查詢時涉及到這個表中的記錄條數過多,是不是沒有合理使用到Index,是不是可以增加其它的過濾條件來減少相關的記錄集合等等。下麵是簡單說明:

 

輸出項 含義

Table       表的名稱。

Scan count     執行的索引或表掃描數。

logical reads 從數據緩存讀取的頁數。

physical reads        從磁碟讀取的頁數。

read-ahead reads           為進行查詢而放入緩存的頁數。

lob logical reads    從數據緩存讀取的 text、ntext、image 或大值類型 (varchar(max)、nvarchar(max)、varbinary(max)) 頁的數目。

lob physical reads          從磁碟讀取的 text、ntext、image 或大值類型頁的數目。

lob read-ahead reads   為進行查詢而放入緩存的 text、ntext、image 或大值類型頁的數目。

 

磁碟IO相關信息先介紹到這裡,另外一個參考數據是使用 set statistics time on 參考顯示分析、編譯和執行語句所需的毫秒數。具體的使用方法同set statistics io on 基本相同,只不過顯示的是本次查詢所使用的分析編譯、執行等的時間信息。聰明的你一定一看就明白了。在此不再贅述。

 

  1. 使用 set statistics profile on 參考顯示當前語句執行的配置文件信息,執行步驟等信息,使用方法同上。

  

 

執行查詢後,除了顯示所執行的結果集合外,還另外顯示本次sql語句執行的相關配置信息,採用記錄樹的形式顯示,對應執行計劃中的各個步驟,比如某個步驟使用的索引類型,評估行數,IO信息,時間信息等。這些信息都可以用來參考,以確定該段sql語句的問題在哪裡。

 

參考當前語句的估計的執行計劃或實際的執行計劃,分析當前語句執行時SQL Server 查詢優化器所選擇的數據檢索方法。

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

-Advertisement-
Play Games
更多相關文章
  • 一、HTML 標題 HTML 標題(Heading)是通過<h1> - <h6> 標簽來定義的. 二、HTML 段落 HTML 段落是通過標簽 <p> 來定義的. 三、HTML 鏈接 HTML 鏈接是通過標簽 <a> 來定義的.在 href 屬性中指定鏈接的地址。 四、HTML 圖像 HTML 圖像 ...
  • Array類型 也是 中常用類型之一,其特點是數組中的每一項都可以保存任何類型的數據,數組的大小可以動態調整。 創建數組 方式1:使用 構造函數 var books = new Array(); var books = new Array(20); //如果知道數組的大小,可以給構造函數傳遞該參數 ...
  • 第一章、引言 1.5 面向對象的程式設計常用概念 對象 (名詞):是指“事物”在程式設計語言中的表現形式。 這裡的事物可以是任何東西,我們可以看到它們具有某些明確特征,能執行某些動作。 這些對象特征就叫做屬性(形容詞),動作稱之為方法(動詞)。 類: 實際上就是對象的設計藍圖或製作配方。類更多的是一 ...
  • Atitit.跨語言異常轉換機制 java c# php到js的異常轉換 1. bizEx 直接抓取,然後js catchEX1 2. Chkec runtimeEx1 3. Other異常。。Js convet 2 js err,then throw ...2 1. bizEx 直接抓取,然後js ...
  • atitit.React 優缺點 相比angular react是最靠譜的web ui組件化方案了 1. React的組件化才是web ui部件的正確方向1 1.1. 組件化集成html ,css,js自我包含一體化,方便復用。1 1.2. 相比angular。Js方便好用1 2. React的問題 ...
  • 一、 數據定義語言(ddl) 數據定義語言ddl(data definition language)用於改變資料庫結構,包括創建、更改和刪除資料庫對象。 用於操縱表結構的數據定義語言命令有: create table alter table truncate table drop table eg、 ...
  • mysql的性能優化無法一蹴而就,必須一步一步慢慢來,從各個方面進行優化,最終性能就會有大的提升。 Mysql資料庫的優化技術 對mysql優化是一個綜合性的技術,主要包括 表的設計合理化(符合3NF) 添加適當索引(index) [四種: 普通索引、主鍵索引、唯一索引unique、全文索引] 分表 ...
  • 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎麼辦呢?不用擔心,Mysql已經為我們提供了這樣一個功能。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset SELECT * FROM table LI ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...