商城首页欢迎来到中国正版软件门户

您的位置:首页 >Ubuntu PHP日志中的数据库查询优化

Ubuntu PHP日志中的数据库查询优化

  发布于2026-08-06 阅读(0)

扫一扫,手机访问

在Ubuntu上跑PHP应用,日志里那些慢查询如果没人管,早晚会拖垮整个系统的响应速度。与其被动的等用户吐槽,不如主动从数据库查询入手,做几件实实在在的优化工作。下面这些步骤,大部分都是实操中反复验证过的,可以直接拿过去用。

Ubuntu PHP日志中的数据库查询优化

1. 慢查询日志先开起来

数据库自己不会告诉你哪个查询慢,但你可以让它记下来。在MySQL的配置文件(my.cnfmy.ini)里加上这几行:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2

这两秒是阈值,超过两秒的查询都会被记下来。改完配置记得重启MySQL服务:

sudo systemctl restart mysql

2. 用EXPLAIN看透查询的执行计划

光知道慢还不够,得知道它为什么慢。EXPLAIN是个好工具,加在查询前面,就能看到MySQL是怎么一步步执行这条SQL的——有没有走索引,扫描了多少行,一目了然。

EXPLAIN SELECT * FROM your_table WHERE your_column = 'value';

如果看到typeALL(全表扫描),那基本上就是性能瓶颈所在。

3. 索引不是越多越好,但该有的必须有

有时候查询慢,纯粹是因为没建索引。给经常出现在WHEREJOINORDER BY后面的列加上索引,效果立竿见影。

CREATE INDEX idx_your_column ON your_table(your_column);

注意,索引不是越多越好,写操作频繁的字段要谨慎加索引,否则写入性能会受损。

4. 别写SELECT *,这是新手最容易犯的毛病

只取你真正需要的列,减少数据传输量,也减少MySQL的负担。

SELECT your_column1, your_column2 FROM your_table WHERE your_column = 'value';

如果一张表有几十个字段,SELECT *会把所有数据都拉出来,网络和内存开销都上去了。

5. 连接池:高并发场景下的必备武器

每次请求都新建一个数据库连接,再断开,开销非常大。使用连接池(比如PHP的pdo_mysql配合持久连接,或者更专业的php-pmSwoole)可以复用连接,显著降低延迟。

6. PHP代码里的小细节,决定大性能

写PHP时,尽量用预处理语句。不仅安全,还能让MySQL重复使用执行计划,省去SQL解析的开销。

$stmt = $pdo->prepare('SELECT * FROM your_table WHERE your_column = :value');
$stmt->execute([':value' => 'your_value']);
$results = $stmt->fetchAll();

7. 缓存:让热门数据少跑数据库

对于那些不怎么变化的数据,比如用户配置、分类列表,完全可以用Redis或Memcached缓存起来。一次查询,多次使用,数据库压力瞬间降下来。

8. 定期给数据库“体检”

数据表长期使用后,碎片会增多,索引效率也会下降。定期执行OPTIMIZE TABLE可以整理碎片、重建索引。

OPTIMIZE TABLE your_table;

9. 监控和日志分析不能停

优化不是一锤子买卖。用起来pt-query-digestmysqldumpslow这类工具,定期分析慢查询日志,及时发现新的慢查询,才能持续保持性能。

10. 表太大怎么办?分区和分表

当单表数据量达到千万级甚至亿级,即使有索引,查询也可能变慢。这时候可以考虑分区(把一张表物理上拆成多个文件)或分表(按业务逻辑拆成多张表),让每次查询只扫描一小部分数据。

实战示例:从日志里揪出一个慢查询

假设你在PHP日志里发现这样一条慢查询:

SELECT * FROM users WHERE email = 'example@example.com';

那就先用EXPLAIN看看:

EXPLAIN SELECT * FROM users WHERE email = 'example@example.com';

如果发现possible_keysNULL,说明没有索引可用。给email字段加上索引:

CREATE INDEX idx_email ON users(email);

再跑一次EXPLAIN,确认索引已经生效,rows从全表扫描变成了1行,性能提升立竿见影。

以上这些步骤,覆盖了从日志发现、分析、优化到持续监控的完整链路。只要坚持做下去,Ubuntu上的PHP应用性能只会越来越好。

本文转载于:https://www.yisu.com/ask/76259715.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注