SQL優化(1) 可能存在問題語句查詢

2021-07-22 20:05:34 字數 1606 閱讀 2039

在查詢執行比較慢、次數多的語句之前先學習的基礎知識。

一、基礎知識

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...