开启mysql慢查询日志需要在配置文件或运行时设置 slow_query_log 为 on,并通过 long_query_time 定义阈值。通常建议将 long_query_time 设置为 1 秒,以过滤掉正常的快速查询并聚焦于真正影响性能的语句。

如何在配置文件中启用慢查询日志?
在 MySQL 的配置文件中添加相关参数是最常用的方法。你需要找到 my.cnf 或 my.ini 文件,并在 [mysqld] 部分下加入以下配置:
slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1
这些配置生效后,所有执行时间超过 1 秒的 SQL 语句都会被记录到指定的日志文件中。重启 MySQL 服务后生效。如果你不想重启,也可以通过动态设置来验证:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;
这种方式立即生效,但重启后会恢复默认值。生产环境中建议使用配置文件方式以确保持久化。
long_query_time 设为多少比较合理?
long_query_time 的值取决于你的业务场景和对性能的要求。一般建议从 1 秒开始,这是一个平衡点,既能捕获明显的慢查询,又不会因阈值过低而产生大量日志噪音。如果你的应用对延迟非常敏感,可以设置为 0.5 秒甚至更低;如果查询本身就很复杂,可以适当提高到 2 秒或更高。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
需要注意的是,long_query_time 只统计 SQL 语句的执行时间,不包括网络传输和连接建立的时间。此外,未使用索引的查询即使很快也可能被误判,因此结合 log_queries_not_using_indexes 可以更精准地定位问题。
SET GLOBAL log_queries_not_using_indexes = 1;
这个设置会将所有未使用索引的查询也记录下来,无论其执行时间多短。这对于发现缺少索引的表非常有用。
如何分析生成的慢查询日志文件?
生成日志后,可以使用 mysqldumpslow 工具来分析日志内容。该工具能汇总相似的查询语句,并按执行次数、耗时等维度排序,帮助你快速识别高频慢查询。
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
上述命令会列出执行时间最长的前 10 条查询。你也可以使用 -s c 按查询次数排序,或者 -s r 按返回行数排序。通过分析这些结果,你可以针对性地优化 SQL 语句或添加索引。










