的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