mysql - SELECT WHERE IN(子查询)慢

标签 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

即使使用索引,查询字符串也很慢:

SELECT id FROM table WHERE uid IN
(SELECT uid WHERE dept='dept1')

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

Retrieves all the uid with dept=dept1 first.
Then use a for-loop for all uid retrieved in the first query.

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

最佳答案

试试这个:

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

关于mysql - SELECT WHERE IN(子查询)慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10023117/

相关文章:

python - 如何让我的 python 代码运行得更快

mysql - SQOOP:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:未知数据库

performance - 回文 - 是否有可能使我的代码更快

php - 创建mysql数据库表的语法错误

mysql - 如何使用索引表以获得更快的性能?

mysql - 从任一表中选择值

php - 带有位置占位符的 MySQL SELECT IN 仅根据字符串中的第一个值进行选择/过滤

javascript - AngularJS - 在 ng-repeat 中排除数组键

MySQL查询不在表中的范围内的最小值

php - 如何从数据库中删除除大列表之外的所有文件?