Bla*_*ckM 12 sql sql-server common-table-expression sql-view
我在这里的问题是,是什么区别CTE和View在SQL.我的意思是在哪种情况下我应该使用CTE和哪种情况View.我知道两者都是某种虚拟表,但我不能区分它们的用途.
更新1:
例如:我有一个填充了trades(tbl_trade)的数据库.我需要从3.5百万条记录中选择当前时间到当前时间打开的交易然后操纵数据(在虚拟表上使用不同的查询 - 这看起来像View).这里的问题是我想要一个SUM3-4列,然后我需要SUM一些列并创建一个带有结果的虚拟列(看起来像CTE).
例如:tbl_trade有列:profit,bonus和expenses.我需要的SUM(profit),SUM(bonus),SUM(expenses)和新的一列total,这将是等于SUM(profit)+ SUM(bonus)+ SUM(expenses).
PS.重新运行查询SUM不是一个选项,因为我已经有了结果.
提前致谢!
Anu*_*thi 20
视图可以编入索引,但CTE不能.所以这是一个重点.
CTE工作优秀,tree hierarchy即递归
此外,在处理复杂查询时请考虑视图.视图是数据库上的物理对象(但不是物理上存储数据),可以用于多个查询,从而提供灵活性和集中式方法.另一方面,CTE是临时的,将在使用时创建; 这就是为什么他们被称为inline view.
更新
根据您更新的问题,观点将是正确的选择.在CTE中处理350万行将在TempDb上产生额外的开销,这最终会降低SQL Server的性能.请记住,CTE是一次性视图,因此不存储统计信息,也无法创建索引.它就像一个子查询.
Plan Optimizer将对两者的解释完全相同.这只是一个不同的事情.
视图可以单独使用.它可以将复杂语句封装到更简单的查询中.
如果CTE主要用于编写更清晰的代码,例如程序/视图中的冗余较少.您也可以使用CTE进行递归查询,这是一个非常强大的功能!
我希望这有助于澄清事情.
| 归档时间: |
|
| 查看次数: |
13074 次 |
| 最近记录: |