如何查詢MySQL中查詢慢的SQL語句

2023-02-24 16:45:03 字數 2823 閱讀 5918

1樓:愛可生雲資料庫

問題我們有乙個 sql,用於找到沒有主鍵 / 唯一鍵的表,但是在 mysql 上執行特別慢,怎麼辦?

實驗我們搭建乙個 mysql 的環境,此處省略搭建步驟。

寫個簡單的指令碼,製造一批帶主鍵和不帶主鍵的表:

執行一下指令碼:

現在執行以下 sql 看看效果:

執行了 ,感覺是非常慢了。

現在用一下 dba 三板斧,看看執行計畫:

感覺有點慘,由於 information_ 是元資料表,沒有必要的統計資訊。

那我們來 show warnings 看看 mysql 改寫後的 sql:

我們格式化一下 sql:

可以看到 mysql 將。

select from a where not in (select x from b) /非關聯子查詢。

轉換成了。select from a where not exists (select 1 from b where = 關聯子查詢。

如果我們自己是 mysql,在執行非關聯子查詢時,可以使用很簡單的策略:

select from a where not in (select x from b where ..非關聯子查詢:

1. 掃瞄 b 表中的所有記錄,找到滿足條件的記錄,存放在臨時表 c 中,建好索引2. 掃瞄 a 表中的記錄,與臨時表 c 中的記錄進行比對,直接在索引裡比對,而關聯子查詢就需要迴圈迭代:

select from a where not exists (select 1 from b where = and ..

) /關聯子查詢掃瞄 a 表的每一條記錄 ra: 掃瞄 b 表,找到其中的第一條滿足 ra 條件的記錄。

顯然,關聯子查詢的掃瞄成本會高於非關聯子查詢。

我們希望 mysql 能先"快取"子查詢的結果(快取這一步叫物化,materialization),但mysql 認為不快取更快,我們就需要給予 mysql 一定指導。

可以看到執行時間變成了 。

\1. 對於 information_schema 中的元資料表,執行計畫不能提供有效資訊。

\2. 通過檢視 mysql 改寫後的 sql,我們猜測了優化器發生了誤判。

\3. 我們增加了 hint,指導 mysql 正確進行優化判斷。

但目前我們的實驗僅限於猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。

2樓:司馬刀劍

一、mysql資料庫有幾個配置選項可以幫助我們及時捕獲低效sql語句。

1,slow_query_log

這個引數設定為on,可以捕獲執行時間超過一定數值的sql語句。

2,long_query_time

當sql語句執行時間超過此數值時,就會被記錄到日誌中,建議設定為1或者更短。

3,slow_query_log_file

記錄日誌的檔名。

4,log_queries_not_using_indexes

這個引數設定為on,可以捕獲到所有未使用索引的sql語句,儘管這個sql語句有可能執行得挺快。

二、檢測mysql中sql語句的效率的方法。

1、通過查詢日誌。

(1)、windows下開啟mysql慢查詢。

mysql在windows系統中的配置檔案一般是是找到[mysqld]下面加上。

**如下。log-slow-queries = f:/mysql/log/

long_query_time = 2

(2)、linux下啟用mysql慢查詢。

mysql在windows系統中的配置檔案一般是是找到[mysqld]下面加上。

**如下。log-slow-queries=/data/mysqldata/

long_query_time=2

如何在mysql查詢效率慢的sql語句

3樓:鄔潔諶夢凡

:一、mysql資料庫有幾個配置選項可以幫助我們及時捕獲低效sql語句1,slow_query_log這個引數設定為on,可以捕獲執行時間超過一定數值的sql語句。2,long_query_.

mysql怎麼查詢比較耗時的sql語句

4樓:何彭真傲冬

如何查詢mysql中查詢慢的sql語句。

一、mysql資料庫有幾個配置選項可以幫助我們及時捕獲低效sql語句。

1,slow_query_log

這個引數設定為on,可以捕獲執行時間超過一定數值的sql語句。

2,long_query_time

當sql語句執行時間超過此數值時,就會被記錄到日誌中,建議設定為1或者更短。

3,slow_query_log_file

記錄日誌的檔名。

4,log_queries_not_using_indexes

這個引數設定為on,可以捕獲到所有未使用索引的sql語句,儘管這個sql語句有可能執行得挺快。

二、檢測mysql中sql語句的效率的方法。

1、通過查詢日誌。

(1)、windows下開啟mysql慢查詢。

mysql在windows系統中的配置檔案一般是是找到[mysqld]下面加上。

**如下。log-slow-queries

=f:/mysql/log/

long_query_time=2

(2)、linux下啟用mysql慢查詢。

mysql在windows系統中的配置檔案一般是是找到[mysqld]下面加上。

**如下。log-slow-queries=/data/mysqldata/

long_query_time=2

mysql中10萬條記錄查詢慢的解決辦法?

如果ware type選擇性比較高 即每個ware type的記錄在總記錄數占比比較小 的話,可以考慮在ware type上建索引。十萬條資料已經夠多了,通常最好的辦法就是建立索引,建立索引的命令 create index index name on table name index col nam...

MySql多條件模糊查詢,mysql如何執行多條件的模糊查詢取交集的

select from 表 where 欄位一 like 搜尋詞 or 欄位二 like 搜尋詞 or 欄位三 like 搜尋詞 select bid,bname,publish,author,kind from book where delflag 0 and bname like 王 查詢bna...

mysql查詢未解碼的unicode漢字,模糊查詢不成功

mysql查詢的時候會將 乾掉,你可以用mysql的like萬用字元來做 like u5f20 u4e09 變成like u5f20 u4e09 試試把漢字前面那個 再轉義一下,應該就可以了。mysql查詢未解碼的unicode漢字,模糊查詢不成功怎麼辦?mysql查詢的時候會將 乾掉,你可以用my...