开启慢查询日志并设置long_query_time=1和log_queries_not_using_indexes=ON,利用mysqldumpslow分析日志中Rows_examined远大于Rows_sent的语句,结合EXPLAIN检查type、key、rows及Extra字段,识别全表扫描或索引未使用问题,针对WHERE条件无索引、复合索引顺序不当、函数操作、数据类型不匹配等常见问题创建或调整索引,持续监控以优化SQL性能。

在 MySQL 中,慢查询日志是发现性能瓶颈、尤其是索引问题的重要工具。通过分析执行缓慢的 SQL 语句,可以识别出缺失索引、索引未命中或低效使用索引的情况。以下是具体的操作步骤和分析方法。
确保慢查询日志已启用,并设置合理的阈值来捕获需要关注的查询:
1. 在 my.cnf 或 my.ini 配置文件中添加以下内容:SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 'ON';
MySQL 提供了 mysqldumpslow 工具用于汇总和分析慢查询日志。
常用命令示例:重点关注输出中的 Rows_examined(扫描行数)和 Rows_sent(返回行数)。若前者远大于后者,说明查询做了大量无效扫描,很可能缺少有效索引。
从慢日志中提取典型慢查询,使用 EXPLAIN 查看执行计划,判断索引使用情况。
执行方式:EXPLAIN SELECT * FROM orders WHERE user_id = 123 AND status = 'pending';
关键字段解读:如果 WHERE 条件中的字段没有索引,或者复合索引顺序不匹配,都可能导致索引失效。
创建索引后,再次运行 EXPLAIN 确认是否命中,并观察慢日志中该语句是否消失。
基本上就这些。关键是持续监控慢查询日志,定期分析并结合执行计划验证索引有效性。不复杂但容易忽略的是 log_queries_not_using_indexes 这个选项,它能帮你快速定位“看似正常却全表扫描”的查询。
以上就是如何在mysql中分析慢查询日志发现索引问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号