MySql數據庫慢查詢


一、什么是數據庫慢查詢?

數據庫慢查詢,就是查詢時間超過了我們設定的時間的語句。

可以查看設定的時間:

 

 

 默認的設定時間是10秒。也可以自己根據實際項目設定。 

set long_query_time=0.0001;

二、MySQL 慢查詢的相關參數解釋:

slow_query_log :是否開啟慢查詢日志,1表示開啟,0表示關閉。

log-slow-queries :舊版(5.6以下版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log

slow-query-log-file:新版(5.6及以上版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log

long_query_time :慢查詢閾值,當查詢時間多於設定的閾值時,記錄日志。

log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢日志中(可選項)。

log_output:日志存儲方式。log_output='FILE'表示將日志存入文件,默認值是'FILE'。log_output='TABLE'表示將日志存入數據庫,這樣日志信息就會被寫入到mysql

慢查詢日志配置:

默認情況下slow_query_log的值為OFF,表示慢查詢日志是禁用的,可以通過設置slow_query_log的值來開啟,如下所示:

show variables like 'slow_query%'; -- 慢查詢

show variables like 'long_query_time'; -- 查詢時間設置

show variables like '%slow_query_log%';-- 查看慢查詢的日志配置

SET GLOBAL slow_query_log = 'ON'; ---開啟慢查詢日志

show variables like 'log_queries_not_using_indexes'; --查看未使用索引的

set global log_queries_not_using_indexes=1; -- 未使用索引的查詢也被記錄到慢查詢日志中

show global status like '%slow_queries%';-- 查詢慢查詢記錄

三、最大連接數的查看與設置

-- 1、查看最大連接數

show variables like '%max_connections%'; -- 上限連接數

SHOW GLOBAL STATUS LIKE 'Max_used_connections' -- 服務響應的最大連接數

比較理想的設置:Max_used_connections / max_connections * 100% ≈ 85%
最大連接數占上限連接數的85%左右,如果發現比例在10%以下,MySQL服務器連接數上限設置的過高了。

-- 2、修改最大連接數
set GLOBAL max_connections = 500;

-- 列出MySQL服務器運行各種狀態值
SHOW GLOBAL STATUS;

四、常見的慢查詢優化

1、索引沒起到作用的情況

1)、使用LIKE關鍵字的查詢語句        在使用LIKE關鍵字進行查詢的查詢語句中,如果匹配字符串的第一個字符為“%”,索引不會起作用。只有“%”不在第一個位置索引才會起作用。

2)、 使用多列索引的查詢語句        MySQL可以為多個字段創建索引。一個索引最多可以包括16個字段。對於多列索引,只有查詢條件使用了這些字段中的第一個字段時,索引才會被使用。

2、優化數據庫結構

1)、將字段很多的表拆解成多個表

2)、設置中間表

3、分解關聯查詢

很多高性能的應用都會對關聯查詢進行分解,就是可以對每一個表進行一次單表查詢,然后將查詢結果在應用程序中進行關聯,很多場景下這樣會更高效。

4、優化limit分頁

  在系統中需要分頁的操作通常會使用limit加上偏移量的方法實現,同時加上合適的order by 子句。如果有對應的索引,通常效率會不錯,否則MySQL需要做大量的文件排序操作。

      一個非常令人頭疼問題就是當偏移量非常大的時候,例如可能是limit 10000,20這樣的查詢,這是mysql需要查詢10020條然后只返回最后20條,前面的10000條記錄都將被舍棄,這樣的代價很高。

        優化此類查詢的一個最簡單的方法是盡可能的使用索引覆蓋掃描,而不是查詢所有的列。然后根據需要做一次關聯操作再返回所需的列。對於偏移量很大的時候這樣做的效率會得到很大提升。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM