我在这里的问题是,是什么区别CTE和View在 SQL 。我的意思是,在这种情况下,我应该使用CTE和View。我知道两者都是某种虚拟表,但是我无法区分它们的用途。
CTE
View
更新1:
例如:我有一个包含trades(tbl_trade)的数据库。我需要从350万条记录中选择仅当月打开的交易,直到当前时间,然后操纵数据(在虚拟表上使用不同的查询- 这看起来像“视图”)。这里的问题是我想要SUM3-4列,然后需要SUM一些列并使用结果创建一个虚拟列(看起来像CTE)。
tbl_trade
SUM
例如:tbl_trade有列:profit,bonus和expenses。我需要的SUM(profit),SUM(bonus),SUM(expenses)和新的一列total,这将是等于SUM(profit)+ SUM(bonus)+ SUM(expenses)。
profit
bonus
expenses
SUM(profit)
SUM(bonus)
SUM(expenses)
total
PS。SUM由于我已经有了结果,因此无法重新运行查询。
提前致谢!
视图可以建立索引,但CTE无法建立索引。因此,这是重要的一点。
CTE在tree hierarchy递归方面表现出色
tree hierarchy
另外,在处理复杂查询时,请考虑视图。视图是数据库上的物理对象(但不物理存储数据),可用于多个查询,因此提供了灵活性和集中式方法。另一方面,CTE是临时的,将在使用时创建。这就是为什么它们被称为的原因inline view。
inline view
更新
根据您更新的问题,视图将是正确的选择。在CTE中处理350万行将在TempDb上产生额外的开销,这最终会降低SQL Server的性能。请记住,CTE是可抛弃的视图,因此不会存储任何统计信息,您也无法创建索引。这就像一个子查询。