我有一个UNION ALL
查询,两个查询有很多共同之处。我正在使用WITH
来处理公共部分(区别在于第一个与一个表连接,第二个查询与另一个表连接 - 我需要结果的联合。)
我的问题是:
WITH
(就像临时表一样)是否存在性能差异?WITH
只是一个别名,它将被计算两次?WITH
会不会有任何区别?WITH
而是使用了表值函数或视图,那会更好吗?答案 0 :(得分:0)
这是我对公共表表达式(CTE)与DB2上的临时表的关系的理解。 CTE是使用WITH关键字创建的。
当您使用CTE时,选择运行时可能无法完全实现。 DB2可以自由地优化表的哪一部分实现以运行查询。
我发现临时表通常更快。我怀疑这是因为我可以在临时表上添加索引。这也减少了最终查询的大小,因此优化器可以更轻松地找到良好的执行路径。
如果我有点懒,我会使用CTE,并且不想创建临时表,或者我想利用它没有实现整个表的事实。
当我使用临时表时,我会小心添加限定符,这样我就不会构建一个大于必要的表。