我得到了我的网站和服务器的家伙告诉它的问题,因为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;发布于 2018-10-11 21:53:27
Yoast SQL插件发出https://wordpress.org/plugins/wordpress-seo/查询。它不是为如此多的用户设计的,SQL查询也不会期望如此。
当然,最干净的解决方案就是不在这样的网站上使用这个插件。
在情况危急的情况下,你不能关闭它-当然,有一些黑客可能会解决这个问题,或者修改代码。
它是从get_users方法的class-author-sitemap-provider.php文件中调用的。现在,它会遍历你所有的帖子,然后查询曾经发帖的用户。您可以尝试在false中设置$defaults['has_published_posts'] = true;,以便至少从查询中排除posts表。删除meta_query参数将使查询更加简单。但所有这些都是肮脏的黑客行为,这当然会影响功能。
https://stackoverflow.com/questions/52642482
复制相似问题