slow_query_log=1 更可靠,XAMPP中ON可能被忽略;必须置于[mysqld]段,路径需转义或用正斜杠,确保目录存在且有写权限。

slow_query_log=ON 还是 slow_query_log=1?XAMPP 里别写错
在 XAMPP 的 MySQL(尤其是 5.6+ 和 MariaDB 分支)中,log_slow_queries 已被废弃,直接写会报错 Error 1193: Unknown system variable 'log_slow_queries'。必须用新变量名,且值推荐用数字而非字符串。
正确写法只有两种:slow_query_log = 1 或 slow_query_log = ON,但实测在某些 XAMPP 版本(如 5.6.21、7.4.33)中,ON 可能被忽略,而 1 更可靠。
-
slow_query_log_file必须指定绝对路径,Windows 下建议避开中文、空格和权限受限目录(如C: mppmysqldataslow.log安全,C:Program Files...很可能写失败) -
long_query_time默认是 10 秒,对开发环境太宽松,建议设为1或0.5 -
log_queries_not_using_indexes = 1要打开——很多“不慢”的查询其实因缺失索引在拖垮整体吞吐
my.ini 里加完配置,MySQL 就不启动了?检查这三处
XAMPP 的 MySQL 配置文件是 my.ini(不是 my.cnf),位于 C:
mppmysqlinmy.ini 或 C:
mppmysqlmy.ini,具体以 XAMPP 控制面板 → Config → MySQL (my.ini) 打开的路径为准。
常见启动失败原因:
- 把配置写在了
[client]或[mysqldump]段下——必须放在[mysqld]段内,否则 MySQL 启动时忽略甚至报错 - 路径含反斜杠未转义:
slow_query_log_file = C: mppmysqldataslow.log会被解析成换行符,得写成C:\xampp\mysql\data\slow.log或正斜杠C:/xampp/mysql/data/slow.log - 日志目录不存在或 MySQL 进程无写权限:手动创建
data子目录,并确保mysql用户(或当前 Windows 用户)有写入权
日志生成了,但 mysqldumpslow 报错“Can't open /path/to/log”?权限和编码问题
Windows 下 mysqldumpslow 常因两件事失败:
- 路径中用了中文或空格,即使加引号也容易出错;解决办法:把日志文件移到
C:/tmp/slow.log这类纯英文无空格路径 - 日志文件是 UTF-16 或带 BOM 的 UTF-8(尤其用记事本保存过),
mysqldumpslow只认 ASCII/UTF-8 no-BOM;用 VS Code 或 Notepad++ 保存为 “UTF-8(无 BOM)” - 命令本身要进
C: mppmysqlin目录运行,不能只输mysqldumpslow -s at /path——Windows 不自动识别 bin 路径,得写全:.mysqldumpslow.exe -s at C:/tmp/slow.log
如果只想快速看最近几条,用 tail -n 20 C:/tmp/slow.log(Git Bash 或 WSL)比 mysqldumpslow 更直接。
查到慢 SQL 了,EXPLAIN 显示 type=ALL?重点盯这三个地方
看到 type: ALL(全表扫描)别急着加索引,先确认是不是这三类低级错误:
- WHERE 条件字段没建索引,或索引列顺序和查询条件不匹配(例如索引是
(a,b),但查询只用了b) - 字段类型不一致:比如
user_id是VARCHAR,但查询写了WHERE user_id = 123(数字),触发隐式转换,索引失效 - 在索引列上用了函数:
WHERE YEAR(create_time) = 2024或WHERE UPPER(name) = 'ABC',会导致无法走索引
真正棘手的是那些 type: index 或 type: range 却依然慢的查询——它们可能扫了几十万行,这时得结合 rows 和 Extra 字段(如 Using filesort、Using temporary)判断是否需要覆盖索引或重写 JOIN 逻辑。



















