IN 子句的性能问题

Performance issue with IN clause

我对在 sql 查询中使用 IN 子句有疑问,以下哪个提供更好的性能

SELECT * FROM emp WHERE deptno IN (10,20)

WITH dep AS (SELECT 10 deptno FROM DUAL UNION ALL
         SELECT 20 deptno FROM DUAL)
SELECT * FROM EMP e
WHERE EXISTS (SELECT 1 FROM dep WHERE dep.deptno=e.deptno);

我正在寻找哪个能提供更好的性能

"In clause" 将是更好的选择,因为在另一个示例中,优化器无法弄清楚如何连接这两个 table,因此它会扫描所有 emp table 并查看是否特别是记录符合你的条件。我已经在巨大的table(超过百万行)上检查过这个并且查询计划非常不同。当然,我假设您在 deptno 列上有索引。如果没有它,两种解决方案都需要对 emp table.

进行全面 table 扫描