2011-07-13 40 views
1

我有以下SQL語句:SQL服務器:想了解這條SQL語句的性能影響

WITH w1 AS (SELECT [Number] AS v1 FROM [MyTable] WHERE <condition>) 
SELECT 
    SUM(CASE WHEN v1 < @Value THEN v1 ELSE @Value END) 
FROM 
    w1; 

我只是好奇,說,如果MyTable的包含10條記錄匹配,多少次將語句在執行上面的SQL語句時處理?

回答

4

這隻會得到內聯和,如果你寫了

SELECT SUM(CASE WHEN [Number] < @Value THEN [Number] ELSE @Value END) 
FROM [MyTable] 
WHERE <condition> 
+0

謝謝。那麼,從技術上講,[數字]部分不是那麼容易。看看這裏的整個SQL語句: http://dl.dropbox.com/u/31368633/sql_query_001.txt 它只是一個ASP NET腳本生成內容的快照。因此,任何想法,如果可以優化? – ahmd0

1

最有可能的是,執行計劃將計算每一行的標量,然後聚合。將爲所有匹配值查詢一次w1

+0

所以你說每次通過兩次也不會得到執行,正確處理一樣嗎? – ahmd0

+1

@ ahmd0編號CTE只定義一個模式。實際執行取決於'select'。在'select'中,你只查詢一次。 – GSerg