wordpress的百万以上的帖子,如何优化?

  • A+
所属分类:WordPress技巧

我想尝试在一个wordpress网站上存储超过100万个帖子,以检查它是否可以做到这一点,所以已经创建了一个随机的帖子,类似于我们想在这个网站上发布的帖子,在导入100万+帖子后,结果是。

有70个帖子的档案馆(index.php)的主要查询需要大约1,60秒。

所以我开始调试查询,这是标准查询。

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts 
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private') 
ORDER BY wp_posts.post_date DESC
LIMIT 1035930, 70

所以我开始处理这个查询,以检查我是否能根据我的要求对其进行优化,在这之后,我们检查了这样的查询只需要0.40秒

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts 
WHERE 1=1
AND wp_posts.post_type = 'post'
LIMIT 1035930, 70

用这一招。

  • 如果通过ORDER BY wp_posts.post_date DESCtoORDER BY ID查询需要1,20秒(0,40秒赚到)。

  • 如果删除ORDER BY,查询需要1秒(0,20秒赚)。

  • 如果删除AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')的查询需要0,40秒(0,60秒赚)。

所以巨大的条件是post_statusORDER BY

在我的项目中不需要 "post_status",所以我可以删除它?

ORDER BY,而用mysql可以在php中替代它吗?我知道php更快,对吗?

那么我怎样才能改进这个查询呢?

那么我怎样才能用最快的查询来代替主查询,例如,我试图用这段代码来删除order by

add_filter ('posts_orderby', 'bm_featureHomeFilterOrder');

    function bm_featureHomeFilterOrder ($order = '') {
        global $wpdb;
        $order = 'none';
        return $order;
    }

但对 "无 "不适用,只对其他变量如ID-标题等适用。

能否使用本地的mysql查询和pre_get_post来删除它?

像 :

 $query = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM $wpdb -> wp_posts 
WHERE 1=1 
AND wp_posts.post_type = 'post'
LIMIT 12080, 70" );

该网站是用这种配置托管的。

  • php 7 FPM
  • 疯疯癫癫
  • memcached(数据库缓存和对象缓存)。
  • APC
  • 兴发xf187在线娱乐 NGINX
  • 用mysqltuner调整了mariadb配置。

这个配置是由easyengine脚本完成的。

使用的主题是启动器主题https://underscores.me/,检查代码以了解索引.php页面的更多信息。

在档案中检索到的数据是(只有特色图片+标题)。

在单篇文章中检索的数据是(标题、类别、内容、25个相关文章)。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin