对于工会来说,组合条件的方式更合适?

时间:2016-03-15 11:37:30

标签: sql postgresql union query-performance

有一些表有一些字段(在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>

1 个答案:

答案 0 :(得分:3)

首先,你真的需要fun run() { fun makePair() = Pair("Apple", "Orange") val (a, b) = makePair() println("b = $b") } 吗?如果您可以使用union,则查询会运行得更好,因为union all会产生删除重复项的开销。

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