我的网站出现问题,由于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;
答案 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
参数会使查询更加简单。
但是所有这些肮脏的技巧当然都会影响功能。