WordPress 卡顿优化实操

我的借一步网 https://jieyibu.net/ 由于帖子数量不断增多已经出现间歇性卡顿。

我想要优化一下,于是安装了几个插件,结果卡顿了。

浏览器调试看出来是卡在 load-styles.php 等 由于优化插件合并小文件导致的问题。

这时候就需要修改 wp-config.php 在里面强制关闭文件合并:

define( 'CONCATENATE_SCRIPTS', false );


接下来就是优化数据库。

主要是 index 优化。

例如:

mysql> EXPLAIN SELECT * FROM wp_posts WHERE post_name = 'example' AND post_type = 'post' AND post_status = 'publish';
+----+-------------+----------+------------+------+-------------------------------------------------------------------------+-----------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+-------------------------------------------------------------------------+-----------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | wp_posts | NULL | ref | post_name,type_status_date,idx_post_name_type,idx_post_name_type_status | post_name | 802 | const | 1 | 51.96 | Using where |
+----+-------------+----------+------------+------+-------------------------------------------------------------------------+-----------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

根据上面的 EXPLAIN​ 查询结果分析:

查询分析

列名 说明
id 1(表示查询的唯一标识)
select_type SIMPLE(表示简单查询,没有子查询)
table wp_posts​(查询的表)
type ref(使用了索引进行查找,效率较高)
possible_keys 可用的索引列表:post_name​, type_status_date​, idx_post_name_type​, idx_post_name_type_status
key post_name​(实际使用的索引)
key_len 802(表示索引使用的字节长度)
ref const(表示常量值,具体值由查询条件提供)
rows 1(预计扫描的行数)
filtered 51.96%(估计符合条件的行的百分比)
Extra Using where(表示还需要在索引结果上进行额外的条件过滤)

关键点

  1. 使用的索引: 查询使用了 post_name​ 索引,但未使用 idx_post_name_type_status​。这表明虽然该索引存在,但在这个特定查询中,使用 post_name​ 索引可能更加高效。
  2. 行数估计: 预计扫描 1 行,表明查询效率较高。
  3. 过滤条件: filtered​ 值为 51.96%,说明大约一半的行符合条件,可能需要进一步优化以提高效率。

优化建议

  1. 考虑联合索引: 如果这个查询频繁执行,考虑创建一个联合索引,包括 post_name​, post_type​, 和 post_status​。这可以提高查询性能,减少额外的 WHERE​ 条件过滤。

    CREATE INDEX idx_name_type_status ON wp_posts (post_name, post_type, post_status);
    
  2. 监控查询性能: 定期使用 EXPLAIN​ 监控其他相关查询的性能,以确保索引被有效利用。

  3. 更新统计信息: 使用 ANALYZE TABLE wp_posts;​ 来更新统计信息,帮助优化器做出更好的索引选择。


重复上面的过程,把主要的大表都逐一优化一下,借一步网果然又飞一般了。

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    65 引用 • 113 回帖 • 267 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...