什么是MySQL中的慢查询?

MySQL的慢查询是指执行时间超过MySQL慢查询日志参数long_query_time设置的值的SQL语句。MySQL会将这些超时的SQL语句记录到慢查询日志中,用于分析和优化。

查看慢查询日志参数:

sql
SHOW VARIABLES LIKE 'slow_query%';

这会显示:

  • slow_query_log:是否开启慢查询日志,1为开启,0为关闭;
  • slow_query_log_file:慢查询日志文件位置;
  • long_query_time:多少秒内的SQL语句记录到慢查询日志,默认10秒。

开启慢查询日志:

sql
SET GLOBAL slow_query_log = 1;

慢查询日志记录格式为:

# Time: 2021-08-23T14:15:00.004753Z
# User@Host: root[root] @ localhost [127.0.0.1] 
# Query_time: 10.1234  Lock_time: 0.0000 Rows_sent: 133  Rows_examined: 444
USE test;
SELECT * FROM products WHERE category = 1;

通过日志我们可以获得:

  • SQL语句执行时间(Query_time)
  • SQL语句锁定时间(Lock_time)
  • 返回行数(Rows_sent)
  • 扫描行数(Rows_examined)
  • 执行用户(User@Host)
  • 执行时间(Time)
  • 具体SQL语句

通过分析慢查询日志,我们可以:

  • 定位执行缓慢的SQL语句;
  • 查找未使用索引的查询;
  • 参数化查询进行优化;
  • 重新考虑数据库或表结构;
  • 调整MySQL配置参数等。

慢查询日志是MySQL中的重要分析和优化工具,DBA应该定期check慢查询日志以确保MySQL性能。