2

我在这里有这个选择:

select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1

此查询仅运行几秒钟。现在我想在另一个选择中使用它,如下所示:

select increment_id from sales_flat_order where entity_id in(
select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1)

这会永远运行,所以我尝试一一插入 ID:

select increment_id from sales_flat_order where entity_id in(329,523,756,761,763,984,1126,1400,1472,2593,3175,3594,3937,...)

这运行得很快,区别在哪里,我怎样才能让我的第一种方法更快地工作?

谢谢!

4

2 回答 2

3

您的查询需要很长时间才能运行,因为它正在执行子查询并查找 sales_flat_order 表的每一行。

加入可能会更快:

select increment_id 
from sales_flat_order
  inner join (select parent_id 
              from sales_flat_order_status_history 
              where status like '%whatever%' 
              group by parent_id having count(parent_id) > 1) Sub 
  on sales_flat_order.entity_id  = Sub.parent_ID

这会强制子查询只执行一次

于 2012-08-14T13:01:09.197 回答
1

子查询以 foreach 样式处理(对每一行进行子选择)。

认为in (1,2,3)不要对某些旧版本的 mysql 使用索引。

于 2012-08-14T12:56:35.423 回答