SQL:in子句,与带有实际数据的in子句相比,查询占用时间过长

the*_*mix 5 mysql subquery in-subquery

我给出了3个SQL查询:

  1. 从user_id = 4的用户中选择student_id; //返回35
  2. select*from student where student_id in(35);
  3. select*from student where student_id in(select user_id = user_id = 4);

前2个查询占用不到0.5秒,但第三个查询类似于包含1st作为子查询的2nd,大约需要8秒.

我根据自己的需要为表编制索引,但时间并没有减少.

有人可以给我一个解决方案或提供一些解释这种行为.

谢谢!

小智 5

实际上,MySQL在最后执行内部查询,它会扫描每个索引.MySQL重写子查询以使内部查询完全依赖于外部查询.

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

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

编辑:

在您的情况下,您应该使用JOIN方法.