SELECT WHERE IN(子查询)慢

时间:2012-04-05 05:31:17

标签: mysql performance select subquery where-clause

我已经尝试过解决方案here,但它不起作用。

我的表是这样的:

   `Index`  uid   dept
...........................
      1    001   dept1
      2    001   dept2
      3    001   dept3
      4    002   dept2
      5    002   dept3
      6    002   dept4
      7    003   dept1
      8    003   dept5
      9    004   dept1
      10   004   dept6

我想检索具有特定dept的所有行。也就是说,如果我想要检索dept1,我想检索除uid = 002之外的所有行,因为uid = 002没有dept1

即使使用index:

,查询字符串也很慢
SELECT id FROM table WHERE uid IN
(SELECT uid WHERE dept='dept1')

我之前没有使用WHERE IN的版本如下:

  

首先使用dept = dept1检索所有uid   然后对第一个查询中检索到的所有uid使用for循环。

对于在第一个查询中检索到的少量(100)行,此方法非常快。但是,它似乎不是一个好的解决方案,因为它会产生大量的查询(每个查询都非常快)。

1 个答案:

答案 0 :(得分:8)

试试这个:

select a.id from Table1 a
inner join Table1 b on a.uid = b.uid and b.dept = 'dept1';

演示:http://sqlfiddle.com/#!2/05774/4