哪种条件组合方式更适合工会?
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_1
、CONDITION_2
、CONDITION_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
的索引,可以在子查询中使用。
有些表有一些字段(在 PostgreSQL 上):
Table1 {a, b, c}
Table2 {c, d, a}
Table3 {f, g, a}
我需要合并几个查询并获得 a
字段。所有这些查询都具有相同的条件 CONDITION_A
和其他不同的条件:CONDITION_1
、CONDITION_2
、CONDITION_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
的索引,可以在子查询中使用。