我知道工会所有的问题都被问了很多,但我有一点点变化。我将在三个不同的查询/表集上进行联合。根据他们的查询定义,前2个将永远不会有重复,但第三个肯定会有重复。
我的问题是,我做工会/工会的顺序是否重要。例如,我应该在我的前2个表上执行UNION ALL,这些表不会有重复项(并且永远不会),然后对第三个表执行UNION,因为它会有重复项吗?或者如果顺序颠倒,顺序会更好吗?或者没关系?
这不是一个真正紧迫的问题,只是想知道在这种情况下是否有最佳实践。
答案 0 :(得分:3)
UNION ALL返回所有行,无需额外处理。一个简单的UNION对整个行集进行排序以消除重复。虽然优化器可能能够通过研究索引和约束来解决所有问题,但您总是可以像这样给它一点:
select * from table1
union all
select * from table2
union all
select *
from (
SELECT DISTINCT * from table3
) T
这确保了只对table3执行sort-and-elimination-duplicatelicates。
任何时候都可以简单明了地将意图传达给人类用户和编译器,这几乎可以肯定是编写代码的正确方法。在这种情况下,性能也可能会提高,并且不会降低。