MySQL慢查询日志是MySQL提供的一种日志记录,它用来记录执行时间超过指定参数(long_query_time)的SQL语句。通过定位分析慢查询日志,我们可以找到优化SQL语句的方法,提高数据库性能。
1.启用慢查询日志
修改MySQL配置文件(my.cnf或者my.ini),添加或者更新以下配置项
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
这里设置long_query_time
为2秒,意味着所有执行时间超过2秒的查询都会被记录到慢查询日志中。log_queries_not_using_indexes
设置为1表示即使查询执行时间没有超过long_query_time
值,但没有使用索引的查询也会被记录。
2. 分析慢查询日志
分析慢查询日志可以使用MySQL自带的mysqldumpslow工具,或者第三方工具如Percona Toolkit中的pt-query-digest。
使用mysqldumpslow:
# 查看慢查询日志中的查询次数最多的语句
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log
# 查看执行时间最长的查询
mysqldumpslow -s l -t 10 /var/log/mysql/mysql-slow.log
# 查看某数据库的慢查询
mysqldumpslow -s c -t 10 -d database_name /var/log/mysql/mysql-slow.log
#查询时间排序(-s t),显示出执行时间最长的前10个查询。
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
3. 使用EXPLAIN来分析查询执行计划
找到慢查询后,使用EXPLAIN或EXPLAIN ANALYZE(MySQL 8.0.18及以上版本)命令来分析具体的SQL查询执行计划。这可以帮助你理解MySQL是如何执行这些查询的,包括是否使用了索引、表的扫描方式、是否有需要优化的地方等。
4. 优化SQL语句
分析慢查询日志中的SQL语句后,根据分析结果对SQL语句进行优化,比如创建合适的索引、改变查询方式等。