我得到我的网站和服务器的人告诉它的问题,因为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条答案
按热度按时间w1jd8yoj1#
yoast搜索引擎优化https://wordpress.org/plugins/wordpress-seo/ 插件问题,sql查询。它不是为这么多的用户而设计的,而且它是sql查询所不期望的。
当然,最干净的解决方案是不要将该插件用于此类网站。
当情况危急时,你不能关闭它-当然有一些黑客可能解决这个问题,或者修改代码。
它是从
class-author-sitemap-provider.php
文件,获取用户方法。现在它会通过你所有的帖子,然后查询曾经发布过帖子的用户。你可以试着$defaults['has_published_posts'] = true;
进入false
至少从查询中排除posts表。正在删除meta_query
参数将使查询更加简单。但所有这些都是肮脏的黑客,当然会影响功能。