Wordpress:左加入php mysql很慢

问题描述 投票:0回答:2

我使用此代码来选择帖子数量

$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;

但是这段代码很慢很长,大约40秒!

wp_woocommerce_order_itemmeta有388116条记录

php mysql wordpress
2个回答
0
投票

仅在绝对必要时才应使用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

0
投票

我将首先添加以下索引来优化此查询:

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`);
© www.soinside.com 2019 - 2024. All rights reserved.