检查问题此SELECT查询需要180秒才能完成(检查问题本身的注释).
IN只能与一个值进行比较,但时差仍然很大.
为什么会那样?
我很好奇EXISTS()应该如何执行更快IN().
当比尔卡温提出一个好点时,我正在回答一个问题.当你使用EXISTS()它时使用相关子查询(依赖子查询)而IN()只使用子查询.
EXPLAIN显示EXISTS并且NOT EXISTS都使用依赖子查询并且IN / NOT IN都只使用子查询..所以我很好奇相关子查询如何比子查询更快?
我之前使用过EXISTS,它的执行速度比IN快,这就是为什么我很困惑.
这是一个带有解释的SQLFIDDLE
EXPLAIN SELECT COUNT(t1.table1_id)
FROM table1 t1
WHERE EXISTS
( SELECT 1
FROM table2 t2
WHERE t2.table1_id <=> t1.table1_id
);
+-------+-----------------------+-----------+-------+---------------+-----------+--------+--------------------------+--------+------------------------------+
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY |KEY_LEN | REF | ROWS | EXTRA |
+-------+-----------------------+-----------+-------+---------------+-----------+--------+--------------------------+--------+------------------------------+
| 1 | PRIMARY | t1 | index | (null) | PRIMARY | 4 | …Run Code Online (Sandbox Code Playgroud)