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 扫描
我对在 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 扫描