首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:in子句与使用实际数据的in子句相比花费的时间过长

SQL:in子句与使用实际数据的in子句相比花费的时间过长
EN

Stack Overflow用户
提问于 2013-06-26 11:15:10
回答 2查看 2.3K关注 0票数 5

我有3个SQL查询,如下所示:

  1. 从用户中选择student_id,其中user_id =4;//返回35
  2. 从(35)中student_id的学生中选择*;
  3. 从student_id in的学生中选择*(从用户选择student_id,其中user_id =4);

前两个查询所需时间不到0.5秒,但第三个查询(类似于第二个包含第一个查询的子查询)大约需要8秒。

我根据需要编制索引表,但时间并没有减少。

有人能给我一个解决方案或对这种行为提供一些解释吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-26 12:02:56

实际上,MySQL在结束时执行内部查询,它会扫描之前的每个索引。MySQL重写子查询,使内部查询完全依赖于外部查询。

例如,它从学生中选择*(取决于您的数据库,但可以返回许多结果),然后将内部查询user_id=4应用于前面的结果。

开发团队正在解决这个问题,应该在6.0 http://dev.mysql.com/doc/refman/5.5/en/optimizing-subqueries.html中“解决”这个问题。

编辑:

在这种情况下,应该使用联接方法。

票数 5
EN

Stack Overflow用户

发布于 2013-06-26 12:06:07

不使用子查询,但是为什么不在这里使用join?

代码语言:javascript
复制
select
  s.*
from
  student s 
inner join 
  user u 
on s.id_student_id = u.student_id
where
  u.user_id = 4
;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17318523

复制
相关文章

相似问题

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