同事跟我反应线上的项目有一个后台列表响应的很慢,我就抽空看了下
列表是由一个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了!
网友评论