with
子句在SQL Server中如何工作?它真的给我提供了一些性能提升,还是它只是帮助制作更可读的脚本?在SQL Server中使用With子句
什么时候使用它?在开始使用它之前,您应该了解关于with
子句的内容?
这里是我说的什么一个例子:
http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx
with
子句在SQL Server中如何工作?它真的给我提供了一些性能提升,还是它只是帮助制作更可读的脚本?在SQL Server中使用With子句
什么时候使用它?在开始使用它之前,您应该了解关于with
子句的内容?
这里是我说的什么一个例子:
http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx
除非使用递归功能,否则CTE
在性能方面并不比简单的内联视图更好。
它只是为您节省一些打字。
优化程序可以自由决定是否重新评估与否,当它被重用,这决定它大多数情况下,重新评估:
WITH q (uuid) AS
(
SELECT NEWID()
)
SELECT *
FROM q
UNION ALL
SELECT *
FROM q
将返回两个不同NEWIDs
。
请注意,其他引擎可能会有不同的行为。与SQL Server
不同,实现CTEs
。
Oracle
支持一个特殊的提示/*+ MATERIALIZE */
,告诉优化器是否应该实现CTE
。
我不能完全肯定的性能优势,但我认为它可以在一定的情况下帮助地方使用子查询的结果该子查询被执行多次。
除此之外,它确实可以使代码更具可读性,并且还可以用于多个子查询将在不同位置剪切和粘贴相同代码的情况。
使用前应该知道什么? 一个很大的缺点是,当你在一个视图中有一个CTE时,你不能在该视图上创建一个聚集索引。这可能是一个很大的麻烦,因为SQL Server没有物化视图,而且之前肯定会咬我。
with
是SQL中的一个关键字,它将临时结果存储在临时表中。例如:
with a(--here a is the temporary table)
(id)(--id acts as colomn for table a)
as(select colomn_name from table_name)
select * from a
无法接受两个答案,但谢谢:) – hgulyan 2010-05-19 10:47:36