mysql的慢查询日志开启与问题定位
一张数据库数据很大的表。
查询一条数据,很快就查询出来了。
根据不同的条件,查到的数据相同,但是查询所花费的时间却是不同的。
使用命令查询慢查询日志是否开启,目前它是关闭着的。
开启日志。
也可以手动设置日志文件的所在路径。
这个日志只记录慢查询的sql语句,而不是所有的sql语句。
时间单位是秒。
查看日志:
我们执行两条sql,一个大于临界时间,一个低于临界时间。
超过临界时间的sql数据会存到日志中。
这种方法会帮我们定位到具体是哪条sql语句执行的慢。
mysql的sql语句执行过程解析
我们退出下数据库,再重启一下数据库服务:
一旦服务重启,慢查询日志就会恢复到默认配置。当然一般工作中是不会太多情况去重启mysql服务的。
如果想让它永久生效,只需要修改配置文件:
增加下面三行即可。
要记住,修改了配置文件后必须要重启服务。
我们能定位到哪条语句慢了,我们还需要看看如何去解析这条语句:
我们这两条语句,一个快,一个慢。
我们就可以分别解析一下:
我们可以看到一条使用了主键索引,查询范围是1条,另一个语句没有用索引,查询范围是全部数据。我们分析到这里就能看到问题所在了。
但是如果还不能看到问题原因,就会使用到我们接下来的方法:
先查看是否开启了性能详情。
我们去开启性能:
再一次使用查询慢的语句:
可以看到这条sql语句执行每一步所耗费的时间。
性能线程的详细解释官方文档链接:
MySQL :: MySQL 5.7 Reference Manual :: 8.14.3 General Thread States
mysql语句优化的几个小建议
条件使用or可能会使索引丢失,浪费了索引。
当字段类型转换的时候也会丢失索引。