我有3个SQL查询,如下所示:
前两个查询所需时间不到0.5秒,但第三个查询(类似于第二个包含第一个查询的子查询)大约需要8秒。
我根据需要编制索引表,但时间并没有减少。
有人能给我一个解决方案或对这种行为提供一些解释吗?
谢谢!
发布于 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中“解决”这个问题。
编辑:
在这种情况下,应该使用联接方法。
发布于 2013-06-26 12:06:07
不使用子查询,但是为什么不在这里使用join?
select
s.*
from
student s
inner join
user u
on s.id_student_id = u.student_id
where
u.user_id = 4
;https://stackoverflow.com/questions/17318523
复制相似问题