哪种条件组合方式更适合工会?

Which way for combining of conditions is preferable for unions?

有些表有一些字段(在 PostgreSQL 上):

Table1 {a, b, c}
Table2 {c, d, a}
Table3 {f, g, a}

我需要合并几个查询并获得 a 字段。所有这些查询都具有相同的条件 CONDITION_A 和其他不同的条件:CONDITION_1CONDITION_2CONDITION_3

哪种条件组合方式更适合并集?

1)CONDITION_A 嵌入到每个查询中:

SELECT a FROM Table1 WHERE <CONDITIONS_1> AND a.someParam=<CONDITION_A>
   UNION
SELECT a FROM Table2 WHERE <CONDITIONS_2> AND a.someParam=<CONDITION_A>
   UNION
SELECT a FROM Table3 WHERE <CONDITIONS_3> AND a.someParam=<CONDITION_A>

2) CONDITION_A嵌入在并集之后。

(SELECT a FROM Table1 WHERE <CONDITIONS_1> 
   UNION
 SELECT a FROM Table2 WHERE <CONDITIONS_2> 
   UNION
 SELECT a FROM Table3 WHERE <CONDITIONS_2> ) WHERE a.someParam=<CONDITION_A>

首先,你真的需要union吗?如果您可以使用 union all 查询将 运行 更好,因为 union 会产生删除重复项的开销。

将条件设置为接近 from 可能是个好主意。这为优化器提供了更多优化查询的机会。例如,每个查询可能有包含 someParam 的索引,可以在子查询中使用。