一尘不染

SQL-CTE与VIEW

sql

我在这里的问题是,是什么区别CTEViewSQL
。我的意思是,在这种情况下,我应该使用CTEView。我知道两者都是某种虚拟表,但是我无法区分它们的用途。

更新1:

例如:我有一个包含trades(tbl_trade)的数据库。我需要从350万条记录中选择仅当月打开的交易,直到当前时间,然后操纵数据(在虚拟表上使用不同的查询-
这看起来像“视图”)。这里的问题是我想要SUM3-4列,然后需要SUM一些列并使用结果创建一个虚拟列(看起来像CTE)。

例如:tbl_trade有列:profitbonusexpenses。我需要的SUM(profit)SUM(bonus)SUM(expenses)和新的一列total,这将是等于SUM(profit)+
SUM(bonus)+ SUM(expenses)

PS。SUM由于我已经有了结果,因此无法重新运行查询。

提前致谢!


阅读 292

收藏
2021-03-17

共1个答案

一尘不染

视图可以建立索引,但CTE无法建立索引。因此,这是重要的一点。

CTE在tree hierarchy递归方面表现出色

另外,在处理复杂查询时,请考虑视图。视图是数据库上的物理对象(但不物理存储数据),可用于多个查询,因此提供了灵活性和集中式方法。另一方面,CTE是临时的,将在使用时创建。这就是为什么它们被称为的原因inline view

更新

根据您更新的问题,视图将是正确的选择。在CTE中处理350万行将在TempDb上产生额外的开销,这最终会降低SQL
Server的性能。请记住,CTE是可抛弃的视图,因此不会存储任何统计信息,您也无法创建索引。这就像一个子查询。

2021-03-17