同事跟我反應線上的項目有一個后臺列表響應的很慢,我就抽空看了下
列表是由一個ajax從后臺取出json數據,所有的開銷都是php+mysql,chrome network顯示那個請求需要26s的響應。我的第一反應應該是數據量大了mysql查詢慢導致。
我記得這個項目配置了慢查詢日志,于是
show global variables like '%slow%' #查看是否開啟滿查詢
slow_query_log 的值為 on 已經開啟了慢查詢
show global variables like '%long%' #查看滿查詢日志文件在哪里
我看了下慢查詢記錄,果然記錄剛剛的查詢,花費時間16s
我復制出該條語句并在本地用備份數據進行分析
explain sql
麥庫截圖20171106115702934.jpg
可以看到該查詢影響了2個表分別是2882和1339行,并且沒有使用索引。
于是我就給他們的關聯字段加上了索引。
ALTER TABLE `smsmsg`
ADD INDEX `phone` (`phone`);
ALTER TABLE `user`
ADD INDEX `phone` (`phone`);
結果
最終響應時間縮短到了56ms,再次分析查詢語句
麥庫截圖20171106115612990.jpg
使用到了索引,并且影響行數只有30和1了!