首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql和subselect,为什么它这么慢?

问MySql和subselect,为什么它这么慢?
EN

Stack Overflow用户
提问于 2012-08-14 20:49:51
回答 2查看 173关注 0票数 2

我在这里有这样的选择:

代码语言:javascript
复制
select parent_id from sales_flat_order_status_history where status like '%whatever%' group by parent_id having count(parent_id) > 1

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
select increment_id from sales_flat_order where entity_id in(329,523,756,761,763,984,1126,1400,1472,2593,3175,3594,3937,...)

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-14 21:01:09

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

连接可能会更快:

代码语言:javascript
复制
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

这将强制子查询仅执行一次

票数 3
EN

Stack Overflow用户

发布于 2012-08-14 20:56:35

子查询是以foreach样式处理的(对于每一行,执行subselect)。

像in (1,2,3)一样思考,在一些老版本的mysql中不使用索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11952587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档