来自作者存档页面的超慢查询会杀死我的数据库

时间:2015-02-18 作者:Brady Swenson

我想知道您是否可以帮助我从作者存档页中找出一些问题,这些问题正在杀死我的数据库服务器。运行这些查询需要7-15秒!

下面是一个示例:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts 
   LEFT JOIN wp_term_relationships ON (
      wp_posts.ID = wp_term_relationships.object_id
   ) 
   LEFT JOIN wp_term_taxonomy ON ( 
      wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
   ) 
WHERE 
   1=1 
   AND (
     ( 
       wp_posts.post_author = 2336 
       OR (
         wp_term_taxonomy.taxonomy = \'author\' 
         AND wp_term_taxonomy.term_id = \'12954\'
       )
     )
   ) 
   AND wp_posts.post_type = \'post\' 
   AND (
      wp_posts.post_status = \'publish\' 
      OR wp_posts.post_status = \'private\'
   ) 
   GROUP BY wp_posts.ID 
   HAVING MAX( 
     IF( 
        wp_term_taxonomy.taxonomy = \'author\', 
        IF ( wp_term_taxonomy.term_id = \'12954\',2,1 ),
        0 
     ) 
   ) <> 1 
   ORDER BY wp_posts.post_date DESC 
   LIMIT 0, 10
发件人rhrealitycheck.org/author/name-edited/ 在里面/nas/wp/www/cluster-1516/rhrealitycheck/index.php:17

require(\'wp-blog-header.php\'), wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts (9,297.1ms)
为什么这个问题如此复杂,仅仅是为了从某个作者那里获取最新的10篇帖子?

我可以做些什么来覆盖查询,比如pre_get_posts 筛选输入functions.php? 如果是这样的话,我该如何启动该过滤器并将其定位为只编写归档页?

1 个回复
SO网友:Privateer

如果内存可用,问题是因为您正在执行一个非常大的查询,然后使用max语句对所有查询运行多个检查。

您可能更幸运地将其分为两个查询,以便将迭代处理保持在最低限度。

例如,您可以:

查询有您想要的作者的帖子查询附加了适当作者术语的帖子合并结果并手动显示

结束

相关推荐

Add CPT values to Database

我不确定这是不是件容易的事。我有一个插件,具有定制帖子类型所需的所有功能:过滤器、导航。。。我需要为这个CPT创建很多帖子(使用分类法)(需要做很多工作才能正确创建它)。所以我只想添加一次这个自定义帖子,而不是每次我想利用我在其他网站的插件。。。实现这一目标的最佳方式是什么?我是不是每次都要进行某种形式的进出口贸易?我应该利用wp\\u insert\\u post并对帖子的内容进行硬编码吗?为我的英语道歉,我不知道我是否已经解释过了。。。谢谢