我在暂存层中有一个表(未编制索引),该表具有接近1亿行。在数据仓库层中,我需要从该表中选择一定数量的行,然后与另一个表(约有5000万行)联接,现在我要使用cte。从此CTE,在与其他表联接之前再次进行了一些汇总。所以在这里,如果使用视图而不是cte会发生什么。由于需要大量时间,因此我无法对其进行测试。
因此,从总体上看,在性能方面仅占一点优势?
cte
或temp table
或view
吗?
感谢您的帮助。
答案 0 :(得分:2)
我认为您应该使用带有索引的本地(单号)临时表。因为首先您将从主表中获取数据。然后,您将应用一些聚合,循环和自定义逻辑。好处不多:-
答案 1 :(得分:1)
根据您的描述,CTE是“创建”一次(定义时),使用一次(聚合时)。
通常,这意味着您应该将代码保留为单个查询,以使优化器找到最佳的执行路径。
通常,当多次引用CTE时,实现CTE将是一个更大的胜利。通常,您可以使用窗口函数来避开多个引用,但这是另一回事。
这是一般性建议,但并非总是如此。将CTE实例化为临时表可以带来两个好处:
第一个可能不是问题,因为您仍然有很大一部分原始行。第二个可能会有所帮助,但这不是轻而易举的事。
您可能想要创建索引的物化视图,而不是临时表。这将保持最新状态,并可能极大地提高性能。