suta2008
【ms sql】通過執行計畫來分析sql效能
如何知道一句sql語句的執行效率呢,只知道下面3種:
1、通過sql語句執行時磁碟的活動量(io)資訊來分析:set statistics io on(開啟) /set statistics io off(關閉)
3、通過執行計畫檢視:ctrl + l
首先有個表,表的資料不多,所以執行結果比較起來可能不會太明顯...
1、先執行set statistics io on&set statistics time on;
2、執行查詢語句,選擇"訊息"選項頁;為方便檢視,使用了聚合函式、group by、order by:
【我們並未查詢表:worktable,為何會有worktable的記錄呢,最最最後面有註明。】
3、按ctrl + l 組合鍵,檢視執行計畫:
如何檢視表的設計或sql語句是否是優化的,這邊以建立索引後執行相同的sql語句,來比對執行結果。
1、建立索引。(為測試效能而建立,未必適用於真實場景)
【這邊沒有出現worktable的記錄,最最最後面有註明。】
3、按ctrl + l 組合鍵,檢視執行計畫:
====是不是感覺不到什麼變化?下圖是未建立索引和建立索引相同sql語句執行效能的對比*****
由於測試資料較少,結果並不明顯。
但可以通過掌握"io讀取"、"時間開銷"、"執行計畫"的引數變化,對sql效能進行調優。
【worktable】在msdn說明:
關係引擎可能需要生成乙個工作表以執行 sql 語句中指定的邏輯操作。工作表是用於儲存中間結果的內部表。
某些 group by、order by 或 union查詢中會生成工作表。
例如,如果 order by 子句引用了不為任何索引涵蓋的列,則關係引擎可能需要生成乙個工作表以按所請求的順序對結果集進行排序。
工作表有時也用作臨時儲存執行部分查詢計畫所得結果的假離線。工作表在tempdb中生成,並在不再需要時自動刪除。
通過鎖定統計資訊來鎖定執行計畫
今天在群裡面看到乙個訊息。提問是這樣的 他認為oracle 10g很痛苦,隨著資料量的變化,sql的執行計畫在不停的改變,導致同乙個儲存過程,時間點不同,執行效率就不同.他的問題是有沒有好的方法讓執行計畫不改變,個人認為是鎖定統計資訊。如何鎖定統計資訊,下面來分布說明 1.首先收集統計資訊 begi...
MSSQL執行計畫的優化建議
執行計畫 提交sql語句,資料庫查詢優化器,經過分析生成,制定多個查詢方式,從中選擇資源使用最少的 資料庫制定執行計畫是按照使用資源最少,而不是時間最短 對應的意思 1 受影響的行數 2 影響的位元組數 3 影響的資料大小 執行計畫 1 table scan 全表掃瞄 效能最差 2 cluster ...
Explain分析執行計畫
mysql將select查詢分為簡單查詢 和複雜查詢 primary 複雜查詢又分為三類 簡單子查詢 subquery 派生表 from語句中的子查詢,derived union查詢 union 例如 各屬性如下 還有ref列 這一列顯示了在key列記錄的索引中,表查詢值所用到的列或常量,常見的有 ...