在查詢執行比較慢、次數多的語句之前先學習的基礎知識。
一、基礎知識
1、sys.dm_exec_sql_text函式(sys.dm_exec_query_plan(plan_handle)與這個函式類似可以查詢執行計畫)
語法:sys.dm_exec_sql_text(sql_handle | plan_handle)
說明:返回由指定的 sql_handle 標識的 sql 批處理的文字。 該錶值函式將替換系統函式 fn_get_sql。
返回列如下:
--dbid smallint 資料庫的 id。
--對於臨時和預定義 sql 語句,指編譯這些語句時所在的資料庫的 id。
--objectid int 物件的 id。
--對於臨時和預定義 sql 語句為 null。
--number smallint 對於帶編號的儲存過程,此列返回儲存過程的編號。 有關詳細資訊,請參閱sys.numbered_procedures (transact-sql)。
--對於臨時和預定義 sql 語句為 null。
--encrypted bit 1 = sql 文字已加密。
--0 = sql 文字未加密。
--text nvarchar(max) sql 查詢的文字。
--對於已加密物件為 null。
3、sys.dm_exec_query_stats表常用列說明
--statement_start_offset int 指示行所說明的查詢在其批查詢或持久化物件文字中的開始位置(以位元組為單位,從 0 開始)。
--plan_handle varbinary(64) 表示查詢所屬的已編譯計畫的標記
--creation_time datetime 編譯計畫的時間
--last_execution_time datetime 上次開始執行計畫的時間。
--execution_count bigint 計畫自上次編譯以來所執行的次數
--total_worker_time bigint 此計畫自編譯以來執行所用的 cpu 時間總量(以微秒為單位報告,但僅精確到毫秒)。
--last_worker_time bigint 上次執行計畫所用的 cpu 時間
--min_worker_time bigint 此計畫在單次執行期間所用的最小 cpu 時間(以微秒為單位報告,但僅精確到毫秒)。 1
--max_worker_time bigint 此計畫在單次執行期間所用的最大 cpu 時間(以微秒為單位報告,但僅精確到毫秒)。 1
--total_physical_reads bigint 此計畫自編譯後在執行期間所執行的物理讀取總次數。
--***_logical_writes 此計畫自編譯後在執行期間所執行的邏輯寫入總次數。當查詢記憶體優化的表時,此項將始終為 0。
--total_rows bigint 查詢返回的總行數。 不能為 null。當本機編譯的儲存過程查詢記憶體優化的表時,此項將始終為 0。
4、二、下面我們進入正題
3、查詢正在執行的sql
mysql 優化隱藏器 優化Sql語句,避免查詢慢
前言 在面試過程中,經常會被問到,如果sql語句執行耗時過長,該如何優化sql,提高查詢效率,在此我根據自己的實際經驗,做如下總結。一 explain分析sql語句 sql優化經常用到explain來檢視sql語句的執行計畫,以下5點是我們重點關注的地方 explain執行sql語句以後顯示的執行計...
1 優化SQL語句的一般步驟
當面對乙個有 sql 效能問題的資料庫時,我們應該從何處入手來進行系統的分析,使得能 夠盡快定位問題sql並盡快解決問題 本文屬於sql 優化系列篇 mysql客戶端連線成功後,通過show session global status命令可以提供伺服器狀態資訊,也可以在作業系統上使用mysqladm...
sql語句優化 盡量使用索引避免全表掃瞄 1
1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null 可以在nu...