首先开启MySQL慢查询日志并使用pt-query-digest分析,再通过PHP记录执行时间过长的SQL,最后针对高频高耗时查询优化索引、避免全表扫描和深分页,提升系统性能。

MySQL慢查询会影响网站性能,尤其在数据量大或并发高的场景下更明显。PHP作为常用后端语言,常与MySQL配合使用,因此通过PHP分析和优化MySQL慢查询是提升系统响应速度的关键步骤。下面介绍如何定位、分析并优化MySQL慢查询。
要分析慢查询,首先要让MySQL记录执行时间较长的SQL语句。
my.cnf或my.ini配置文件中启用慢查询日志:log_slow_queries = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = ON
long_query_time 设置为1表示超过1秒的查询会被记录,可根据业务调整。SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_output = 'FILE';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
立即学习“PHP免费学习笔记(深入)”;
MySQL自带mysqldumpslow工具,可帮助汇总慢查询日志内容。
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
pt-query-digest,支持详细统计和分析:pt-query-digest /var/log/mysql/slow.log > slow_report.txt
除了数据库层,可在PHP代码中主动监控SQL执行时间。
$start = microtime(true);
$result = mysqli_query($conn, $sql);
$end = microtime(true);
$time = $end - $start;
if ($time > 1.0) {
error_log("Slow Query [{$time}s]: {$sql}");
}
找到慢查询后,针对性优化是关键。
EXPLAIN查看是否走索引、扫描行数等。WHERE YEAR(create_time) = 2024会导致索引失效。OFFSET过大,可用游标或记录上次ID方式优化。例如,以下查询可能很慢:
SELECT * FROM orders WHERE status = 'paid' ORDER BY create_time DESC LIMIT 1000, 20;
SELECT * FROM orders WHERE status = 'paid' AND create_time
基本上就这些。开启慢查询日志、借助工具分析、在PHP中增强监控、针对性优化SQL和索引,能显著提升数据库性能。关键是持续关注、定期审查,把慢查询控制在萌芽状态。
以上就是mysql慢查询如何优化_PHP分析和优化mysql慢查询的方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号