慢查询挂起服务器

时间:2018-10-04 08:39:05

标签: mysql wordpress yoast

我的网站出现问题,由于MySQL的查询缓慢,服务器人员告诉我。我的网站在Wordpress CMS中。下面是查询,它会产生问题。我不确定,此查询何时运行。我的数据库中有70000多个用户。

# Query_time: 1078.445935  Lock_time: 0.000236 Rows_sent: 59  Rows_examined: 379721873
SET timestamp=1538539120;
SELECT DISTINCT wp_users.ID FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  LEFT JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id )  LEFT JOIN wp_usermeta AS mt2 ON ( wp_users.ID = mt2.user_id )  LEFT JOIN wp_usermeta AS mt3 ON (wp_users.ID = mt3.user_id AND mt3.meta_key = 'wpseo_noindex_author' ) WHERE 1=1 AND wp_users.ID IN ( SELECT DISTINCT wp_posts.post_author FROM wp_posts WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type IN ( 'post', 'page', 'attachment', 'static-block' ) ) AND ( 
  wp_usermeta.meta_key = '_yoast_wpseo_profile_updated' 
  AND 
  ( 
    ( mt1.meta_key = 'wp_user_level' AND mt1.meta_value != '0' ) 
    AND 
    ( 
      ( mt2.meta_key = 'wpseo_noindex_author' AND mt2.meta_value != 'on' ) 
      OR 
      mt3.user_id IS NULL
    )
  )
) ORDER BY wp_usermeta.meta_value+0 

DESC;

1 个答案:

答案 0 :(得分:0)

Yoast SEO https://wordpress.org/plugins/wordpress-seo/插件发出该SQL查询。 它不是为如此数量的用户设计的,它是SQL查询所不希望的。

最干净的解决方案当然是不要在此类网站上使用该插件。

在紧急情况下,您无法将其关闭-当然,有一些可能的解决方法或代码修改方法。

class-author-sitemap-provider.php文件的get_users方法调用。现在,它会遍历您的所有帖子,然后查询曾经发布过的用户。 您可以尝试设置 $defaults['has_published_posts'] = true; 放入false中,以至少从查询中排除帖子表。 删除meta_query参数会使查询更加简单。 但是所有这些肮脏的技巧当然都会影响功能。