我在这里有这样的选择:
select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1此查询仅运行几秒钟。现在我想在另一个select中使用它,如下所示:
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)这将永远运行,所以我尝试一个接一个地插入I:
select increment_id from sales_flat_order where entity_id in(329,523,756,761,763,984,1126,1400,1472,2593,3175,3594,3937,...)这运行得很快,区别在哪里?我如何才能让我的第一种方法更快地工作?
谢谢!
发布于 2012-08-14 21:01:09
您的查询需要很长时间才能运行,因为它正在执行子查询并查找每一行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-14 20:56:35
子查询是以foreach样式处理的(对于每一行,执行subselect)。
像in (1,2,3)一样思考,在一些老版本的mysql中不使用索引。
https://stackoverflow.com/questions/11952587
复制相似问题