天天看點

mysql 慢查詢 定位過程,和order by有關

最近有同僚回報mysql 主備同步告警逾時比較多,首先使用

show processlist;
           

看了下,有很多查詢語句狀态顯示Sending data,網上查閱了相關資料,提示"Sending data" 狀态是指mysql處理結果并回傳給用戶端的階段。查詢語句大概長這樣

select * from table where t1 <= now() and t2 >= now() and v1 = 0 and v2 = 1 order by id asc limit 100
           

 使用explain 指令看了下這條語句,顯示使用了主鍵索引,我覺得這裡主鍵索引主要用在order by裡面排序,根據業務邏輯看了下,這裡排序是沒有必要的,于是去掉了order by id asc,重新explain 了一下,使用了t1和t2聯合索引,查詢速度也從原來0.7s降到了0.18s,降了大概75%。效果還是挺明顯。

對于類似的問題,分析思路大概都是先看下語句卡在哪裡,可以通過show processlist,然後對語句進行優化,使用explain檢視使用到哪些索引等等。

================================================================================================

Linux應用程式、核心、驅動、背景開發交流讨論群(745510310),感興趣的同學可以加群讨論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。...

繼續閱讀