IN子句的性能问题

问题描述 投票:0回答:1

我有疑问要在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);

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

oracle database-performance query-performance
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.