我有3个SQL查询:
前两个查询的时间不到0.5秒,但是第三个查询类似于第二个包含1st作为子查询,大约需要8秒。
我根据自己的需要为表编制索引,但时间并没有减少。
有人可以给我一个解决方案或对此行为提供一些解释。
谢谢!
答案 0 :(得分:5)
实际上,MySQL在最后执行内部查询,它会扫描每个索引。 MySQL重写子查询,以使内部查询完全依赖于外部查询。
例如,它从学生中选择*(取决于您的数据库,但可以返回许多结果),然后将内部查询user_id = 4应用于上一个结果。
开发团队正在解决这个问题,它应该在6.0 http://dev.mysql.com/doc/refman/5.5/en/optimizing-subqueries.html
中“解决”修改强>
在您的情况下,您应该使用JOIN方法。
答案 1 :(得分:1)
不是使用子查询,但为什么不在这里使用连接?
select
s.*
from
student s
inner join
user u
on s.id_student_id = u.student_id
where
u.user_id = 4
;