这或许是
一番大事业的开端!

WordPress十万篇文章数据库优化指南

WordPress网站访问慢,一般是数据库查询语句执行慢导致的。

例如:查询语句如下

SELECT wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND ((wp_posts.post_status = 'publish'))
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5
/* 受影响记录行数: 0  已找到记录行: 5  警告: 0  持续时间 1 查询: 15.016 秒. */

上面一条语句执行要15秒,这未免太慢了。

通过改WordPress代码中的查询语句,肯定可以解决这些问题,但问题是,如果要改sql语句,势必要改很多代码,这个方法我不推荐。

有的人可能说加索引,但加上索引后,发现执行还是很慢。原因是,有的查询语句未必会用到索引,所以,这个方法我也不推荐。

其实WordPress慢的原因,很大一部分跟wp_posts表查询有关,仔细观察这个表,你会发现这个表引擎是InnoDB,MySQL有个非常适合查询的表引擎是MyISAM,如果把这个表引擎改为MyISAM是否会更快了?

改变表引擎:

ALTER TABLE `wp_posts`
	COLLATE='utf8mb4_unicode_520_ci',
	ENGINE=MyISAM,
	CONVERT TO CHARSET utf8mb4 COLLATE 'utf8mb4_unicode_520_ci';

改完后,再次执行查询语句

/* 受影响记录行数: 0  已找到记录行: 5  警告: 0  持续时间 1 查询: 0.750 秒. */

速度提升了,由15.016秒变为了0.750秒,这速度已经很快了。

为了测试,那我就将整个数据库中的所有表引擎都改为MyISAM试试。

WordPress十万篇文章数据库优化指南

改完之后,WordPress后台文章列表页面基本上可以4秒左右打开。

WordPress十万篇文章数据库优化指南

后台标签页面由于排序导致页面加载慢,可以通过代码修改排序规则。

SELECT t.term_id
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy IN ('post_tag')
ORDER BY t.name ASC
LIMIT 20
/* 受影响记录行数: 0  已找到记录行: 20  警告: 0  持续时间 1 查询: 18.485 秒. */

这个只能改查询语句了。

add_filter('get_terms_args',function ($args, $taxonomies ){
    $args['orderby'] = 'term_id';
    return $args;
},10,2);

强制将排序改为按照term_id排序,现在,查询肯定很快。

WordPress十万篇文章数据库优化指南

上面那条语句放弃优化,2秒可以接受。

基本上网站后台页面没有之前那么卡了,至于前台页面的优化,需要根据主题代码来优化,这边推荐安装缓存加速类的插件解决前台访问慢的问题。

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《WordPress十万篇文章数据库优化指南》
文章链接:https://www.wzdao.com/1312.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册