MySQL資料庫抓取慢sql
優化思路:抓取(範圍) 》定位(縮小範圍) 》分析並給出建議
1、抓取,首先開啟mysql慢查詢
mysql伺服器中找到my.Conf的配置檔案,slow_query_log=1表示將大於1秒的sql語句抓取出來,slow_query_log_file=/var/log/mysql/slowquery_jumei.log表示將日誌輸出到/var/log/mysql/slowquery_jumei.log
注意:配置檔案改動後重啟服務(service XXX restart)/重啟機器(reboot)
重啟成功後使用mysql客戶端驗證慢查詢是否開啟成功,如下圖:
2、縮小範圍,使用mysqldumpslow分析慢查詢抓取到的日誌檔案
① mysqldumpslow -s c -t 5 /var/log/mysql/slowquery.log可以看出訪問次數最多的5個sql語句
② mysqldumpslow -s r -t 5 /var/log/mysql/slowquery.log可以看出返回記錄集最多的5個sql
③ mysqldumpslow -t 5 -s t -g “ left join” /var/log/mysql/slowquery.log按時間返回前5條裡面含有左連線的sql語句
3、抓到sql語句後使用explain優化sql
用法:explain後跟要優化的sql語句
4、重點關注點:
① type 表示mysql在表中找到所需行的方式,又稱“訪問型別”,常見型別如下:從左至右,有最差到最好:
All index range ref eq_ref const system null
② Key顯示mysql在查詢中實際使用的索引,若沒有使用索引,顯示為null
③ Rows 表示mysql根據表統計資訊以及索引選用情況,估算找到所需記錄需要讀取的行數(越小越好)
④ Extra
如果是only index 這意味著資訊只用索引樹中的資訊檢索出的,這比掃描整個表要快。
如果是where used ,就是使用上了where限制。
如果是impossible where 表示用不著where,一般就是沒查出來啥。
如果此資訊顯示Using filesort 或者Using temporary的話會很吃力,where和order by的索引經常無法兼顧,如果按照where來確定索引,那麼在order by時,就必然會引起Using filesort,這就要看是先過濾再排序划算,還是先排序再過濾划算
本文來自部落格園,作者:up~up,轉載請註明原文連結:https://www.cnblogs.com/soft-engineer/p/15355613.html