我在这里选择:
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,...)
这种方法运行得很快,差异在哪里?如何让我的第一种方法更快地运作?
谢谢!
答案 0 :(得分: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
这会强制子查询只执行一次
答案 1 :(得分:1)
子查询以foreach样式处理(每行进行子选择)。
认为in (1,2,3)
不要在某些旧版本的mysql中使用索引。