拥有200K的Wordpress网站发布SQL_CALC_FOUND_ROWS且JOIN慢吗?优化速度?

时间:2019-01-11 16:11:53

标签: mysql sql wordpress optimization

我有一个Intel®Xeon(R)CPU E5-2620 v2 @ 2.10GHz,24核心/ 32 GB ram服务器,并且对来自具有20万个帖子的站点的查询感到奇怪。以下是其中一些:

+--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+ | 187729 | site_com | localhost | site_com | Query | 2 | Sending data | 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_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (436695) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) AND wp_term_relationships.term_taxonomy_id IN (206,506,636,637,801,4237,4646,4647,4648) ) AND ( wp_postmeta.post_id IS NULL OR ( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 45 | 0.000 | | 187742 | site_com | localhost | site_com | Query | 1 | Sending data | 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_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (289150) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) AND wp_term_relationships.term_taxonomy_id IN (79,308,674) ) AND ( wp_postmeta.post_id IS NULL OR ( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 45 | 0.000 | | 187755 | site_com | localhost | site_com | Query | 8 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161366) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187787 | site_com | localhost | site_com | Query | 3 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (442261) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'site2.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187798 | site_com | localhost | site_com | Query | 2 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161180) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 9 | 0.000 | | 187845 | site_com | localhost | site_com | Query | 5 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (160175) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 13 | 0.000 | | 187901 | site_com | localhost | site_com | Query | 0 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (159918) AND ( wp_posts.ID NOT IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (30) ) ) AND ( ( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' ) AND ( mt1.post_id IS NULL OR ( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' ) ) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 13 | 0.000 | +--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+

我尝试了一些与Wordpress混淆的功能,我尝试添加post_id_meta_key索引,但这也失败了。大家有什么想法吗?非常感激!!由于该站点和mysql,我的服务器现在的CPU使用率为1000%,平均负载为20-30或更高。

2 个答案:

答案 0 :(得分:1)

在我看来,WordPress的设计目的不是要处理数千个帖子。

(可能会有更多帮助这些查询的东西。)

答案 1 :(得分:1)

已经有一段时间了,但是通过创建下面的索引,我能够极大地减少与问题中提到的查询非常相似的查询时间:

CREATE INDEX post_id_meta_key ON wp_postmeta (post_id, meta_key(191));

我是通过浏览Github issue comment posted的Yoast插件项目来找到这个的

希望它将在以后帮助其他有类似问题的人。