【发布时间】:2011-07-23 04:34:54
【问题描述】:
我正在对 Oracle 数据库执行两个查询的UNION。它们都有一个WHERE 子句。如果我在UNION 查询之后执行WHERE 与在WHERE 子句之后执行UNION 相比,性能是否有差异?
例如:
SELECT colA, colB FROM tableA WHERE colA > 1
UNION
SELECT colA, colB FROM tableB WHERE colA > 1
相比:
SELECT *
FROM (SELECT colA, colB FROM tableA
UNION
SELECT colA, colB FROM tableB)
WHERE colA > 1
我相信在第二种情况下,它会对影响性能的两个表执行全表扫描。对吗?
【问题讨论】:
-
获取解释计划并证明您的信念。然后在您的环境中运行测试并计时,看看哪一个获胜。
-
对于这样一个简单的查询,可能没有区别,因为 Oracle 可能会将谓词(WHERE 子句)推送到派生表/内联视图中。
-
了解您正在运行的 Oracle 版本可能很有价值。