MySQL中,如何定位慢查询?
候选人:
嗯,我们当时在做压力测试时发现有些接口响应时间非常慢,超过了2秒。因为我们的系统部署了运维监控系统Skywalking,在它的报表展示中可以看到哪个接口慢,并且能分析出接口中哪部分耗时较多,包括具体的SQL执行时间,这样就能定位到出现问题的SQL。
如果没有这种监控系统,MySQL本身也提供了慢查询日志功能。可以在MySQL的系统配置文件中开启慢查询日志,并设置SQL执行时间超过多少就记录到日志文件,比如我们之前项目设置的是2秒,超过这个时间的SQL就会记录在日志文件中,我们就可以在那里找到执行慢的SQL。
那这个SQL语句执行很慢,如何分析呢?
候选人:如果一条SQL执行很慢,我们通常会使用MySQL的EXPLAIN
命令来分析这条SQL的执行情况。通过key
和key_len
可以检查是否命中了索引,如果已经添加了索引,也可以判断索引是否有效。通过type
字段可以查看SQL是否有优化空间,比如是否存在全索引扫描或全表扫描。通过extra
建议可以判断是否出现回表情况,如果出现,可以尝试添加索引或修改返回字段来优化