簡體   English   中英

在SQL Server中使用With子句

[英]Use of With Clause in SQL Server

with子句如何在SQL Server中工作? 它真的能給我一些性能提升,還是只是幫助制作更易讀的腳本?

什么時候使用它? 你應該知道什么with條款你開始使用它之前?

這是我正在談論的一個例子:

http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx

我不完全確定性能優勢,但我認為在使用子查詢導致子查詢多次執行的情況下,它肯定會有所幫助。

除此之外,它絕對可以使代碼更具可讀性,並且還可以用於多個子查詢將在不同位置剪切和粘貼相同代碼的情況。

在使用它之前你應該知道什么? 一個很大的缺點是,當您在視圖中有CTE時,您無法在該視圖上創建聚簇索引。 這可能是一個很大的痛苦,因為SQL Server沒有物化視圖,並且之前肯定咬過我。

除非使用遞歸功能,否則CTE在性能方面不如簡單的內聯視圖。

它只是為您節省一些打字。

優化器可以自由決定是否重新評估它,何時重用它,並且在大多數情況下它決定重新評估:

WITH    q (uuid) AS
        (
        SELECT  NEWID()
        )
SELECT  *
FROM    q
UNION ALL
SELECT  *
FROM    q

將返回兩個不同的NEWIDs

請注意,其他引擎可能表現不同。

SQL Server不同, PostgreSQL實現了CTEs

Oracle支持一個特殊提示/*+ MATERIALIZE */ ,它告訴優化器是否應該實現CTE

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM