Wordpress:左加入php mysql很慢

时间:2017-12-18 08:57:46

标签: php mysql wordpress

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

$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条记录

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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`);