IN子句的性能问题

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

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

OR

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);

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

ysuzhanghao 回答:IN子句的性能问题

“ In子句”将是更好的选择,因为在另一个示例中,优化器无法弄清楚如何联接这两个表,因此它会扫描所有emp表,并查看特定记录是否满足您的条件。我已经在巨大的表(超过一百万行)上检查了这一点,查询计划却大不相同。当然,我假设您在deptno列上具有索引。没有它,这两个解决方案都需要对emp表进行全表扫描。

本文链接:https://www.f2er.com/3069935.html

大家都在问