[英]view over cte or temp table?
我在暂存层中有一个表(未编制索引),该表具有接近1亿行。 在数据仓库层中,我需要从该表中选择一定数量的行,然后与另一个表(约有5000万行)联接,现在我要使用cte。 从此CTE,在与其他表联接之前再次进行了一些汇总。 所以在这里,如果使用视图而不是cte会发生什么。 由于需要大量时间,因此我无法对其进行测试。
因此,从总体上讲,在性能方面哪一个略有优势?
cte
或temp table
或view
?
任何帮助表示赞赏。
我认为您应该使用带有索引的本地(单号)临时表。 因为首先您将从主表中获取数据。 然后,您将应用一些聚合,循环和自定义逻辑。 好处不多:-
根据您的描述,CTE是“创建”一次(定义时),使用一次(聚合时)。
通常,这意味着您应将代码保留为单个查询,以使优化器找到最佳的执行路径。
通常,当多次引用CTE时,实现CTE将是一个更大的胜利。 通常,您可以使用窗口函数来避开多个引用,但这是另一回事。
这是一般性建议,但并非总是如此。 将CTE实例化为临时表可以带来两个好处:
第一个可能不是问题,因为您仍然有很大一部分原始行。 第二个可能会有所帮助,但这并非难事。
您可能想要创建索引的物化视图,而不是临时表。 这将保持最新状态,并可能极大地提高性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.