MySQL慢查詢優(yōu)化解決問題
1. MySQL慢查詢介紹
MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,它用來記錄在MySQL中響應(yīng)時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢?nèi)罩局?。long_query_time的默認值為10,意思是運行10S以上的語句。默認情況下,Mysql數(shù)據(jù)庫并不啟動慢查詢?nèi)罩?,需要我們手動來設(shè)置這個參數(shù),當然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動該參數(shù),因為開啟慢查詢?nèi)罩緯蚨嗷蛏賻硪欢ǖ男阅苡绊?。慢查詢?nèi)罩局С謱⑷罩居涗泴懭胛募?,也支持將日志記錄寫入?shù)據(jù)庫表
慢查詢?nèi)罩鞠嚓P(guān)參數(shù):
MySQL 慢查詢的相關(guān)參數(shù)解釋:
slow_query_log:是否開啟慢查詢?nèi)罩荆?表示開啟,0表示關(guān)閉。log-slow-queries:舊版(5.6以下版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂???梢圆辉O(shè)置該參數(shù),系統(tǒng)則會默認給一個缺省的文件host_name-slow.logslow-query-log-file:新版(5.6及以上版本)MySQL數(shù)據(jù)庫慢查詢?nèi)罩敬鎯β窂???梢圆辉O(shè)置該參數(shù),系統(tǒng)則會默認給一個缺省的文件host_name-slow.loglong_query_time:慢查詢閾值,當查詢時間多于設(shè)定的閾值時,記錄日志。log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢?nèi)罩局校蛇x項)。log_output:日志存儲方式。log_output='FILE'表示將日志存入文件,默認值是'FILE'。log_output='TABLE'表示將日志存入數(shù)據(jù)庫,這樣日志信息就會被寫入到mysql.slow_log表中。MySQL數(shù)據(jù)庫支持同時兩種日志存儲方式,配置的時候以逗號隔開即可,如:log_output='FILE,TABLE'。日志記錄到系統(tǒng)的專用日志表中,要比記錄到文件耗費更多的系統(tǒng)資源,因此對于需要啟用慢查詢?nèi)罩?,又需要能夠獲得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件。
2.發(fā)現(xiàn)問題(主動/被動)
問題點:數(shù)據(jù)庫查詢過程中速度過慢的SQL語句
主動:數(shù)據(jù)庫默認情況下slow_query_log的值為OFF,表示慢查詢?nèi)罩臼墙玫?/p>
mysql> show variables ?like '%slow_query_log%'; +---------------------+-----------------------------------------------+ | Variable_name ? ? ? | Value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | +---------------------+-----------------------------------------------+ | slow_query_log ? ? ?| OFF ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | | slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log | +---------------------+-----------------------------------------------+ 2 rows in set (0.00 sec) ? mysql> set global slow_query_log=1; Query OK, 0 rows affected (0.09 sec) ? mysql> show variables like '%slow_query_log%'; +---------------------+-----------------------------------------------+ | Variable_name ? ? ? | Value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | +---------------------+-----------------------------------------------+ | slow_query_log ? ? ?| ON ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log | +---------------------+-----------------------------------------------+ 2 rows in set (0.00 sec)
被動:用戶在使用程序時候告知頁面反應(yīng)慢
3.找到原因-對癥下藥
原因點:沒有加索引、索引失效、SQL極度復雜、高并發(fā)
1.表結(jié)構(gòu)設(shè)計時沒有索引導致
2.SQL語句導致索引失效
索引失效7字口訣:
- 模:模糊查詢LIKE以%開頭
- 型:數(shù)據(jù)類型錯誤
- 數(shù):對索引字段使用內(nèi)部函數(shù)
- 空:索引列是NULL
- 運:索引列進行四則運算
- 最:復合索引不按索引列最左開始查找
- 快:全表查找預計比索引更快
3.SQL極度復雜10張以上表聯(lián)合查詢
- 優(yōu)化表結(jié)構(gòu)和程序
4.高并發(fā)時段導致等待
- 在程序和數(shù)據(jù)庫之間加入緩存
Hole yor life get everything if you never give up.
到此這篇關(guān)于MySQL慢查詢優(yōu)化解決問題的文章就介紹到這了,更多相關(guān)MySQL慢查詢優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 分區(qū)與分庫分表策略應(yīng)用小結(jié)
在大數(shù)據(jù)量、復雜查詢和高并發(fā)的應(yīng)用場景下,單一數(shù)據(jù)庫往往難以滿足性能和擴展性的要求,本文將詳細介紹這兩種策略的基本概念、實現(xiàn)方法及優(yōu)缺點,并通過實際案例展示如何在項目中應(yīng)用它們,感興趣的朋友一起看看吧2025-04-04
MySQL數(shù)據(jù)庫之字符集?character
這篇文章主要介紹了MySQL數(shù)據(jù)庫之字符集?character,文章基于MySQL的的相關(guān)資料展開詳細介紹,具有一定的參考價值需要的小伙伴可以參考一下2022-05-05
mysql 觸發(fā)器創(chuàng)建與使用方法示例
這篇文章主要介紹了mysql 觸發(fā)器創(chuàng)建與使用方法,結(jié)合實例形式分析了mysql 觸發(fā)器基本概念、原理、創(chuàng)建、使用方法及操作注意事項,需要的朋友可以參考下2020-05-05
mysql關(guān)聯(lián)查詢速度慢的問題及解決
這篇文章主要介紹了mysql關(guān)聯(lián)查詢速度慢的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
淺談sql語句中GROUP BY 和 HAVING的使用方法
GROUP BY語句和HAVING語句,經(jīng)過研究和練習,終于明白如何使用了,在此記錄一下同時添加了一個自己舉的小例子,通過寫這篇文章來加深下自己學習的效果,還能和大家分享下,同時也方便以后查閱,一舉多得,下面由小編來和大家一起學習2019-05-05

