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