的WordPress:LEFT JOIN PHP的MySQL很慢

我使用此代码上岗的WordPress:LEFT JOIN PHP的MySQL很慢

$select = SELECT COUNT(DISTINCT wpPost.ID) 

FROM `wp_posts` wpPost

RIGHT JOIN `wp_woocommerce_order_itemmeta` wpOrderItem

ON wpOrderItem.`meta_value`='6246'

WHERE wpPost.`post_status`='wc-completed'

GROUP BY wpPost.`ID`

ORDER BY wpPost.`post_date` DESC

$wpdb->get_results("$select");

echo $wpdb->num_rows;

的SELECT COUNT但这个代码是非常缓慢的,很长一段时间约40秒!

wp_woocommerce_order_itemmeta有388116条记录

回答:

原因之一DISTINCT应使用只有在绝对必要的 结果集必须按顺序找到并删除 进行排序复制

我不是确定为什么你的查询需要很长时间,但我有一个解决方法,通过从查询中删除不同的总和计数。

随意选择保留最小ID。另外,避免使用隐式连接语法。

您的查询应该是:

SELECT COUNT(wpPost.ID), MIN(wpPost.ID) 

FROM `wp_posts` wpPost

RIGHT JOIN `wp_woocommerce_order_itemmeta` wpOrderItem

ON wpOrderItem.`meta_value`='6246'

WHERE wpPost.`post_status`='wc-completed'

GROUP BY wpPost.`ID`

ORDER BY wpPost.`post_date` DESC

回答:

我就开始添加以下指标来优化这个查询:

ALTER TABLE 

`wp_posts`

ADD

INDEX `wp_posts_index_1` (`post_status`, `ID`);

ALTER TABLE

`wp_woocommerce_order_itemmeta`

ADD

INDEX `wp_woocommerce_order_itemmeta_index_1` (`meta_value`);

以上是 的WordPress:LEFT JOIN PHP的MySQL很慢 的全部内容, 来源链接: utcz.com/qa/261888.html

回到顶部