2014-09-23 80 views
0

我有一個查詢(簡體),其計算C商店查詢結果或使用嵌套查詢

SELECT A + B AS C FROM Foo 

查詢返回50萬行。

我需要選擇行的地方C < 0.3。要做到這一點,我將結果插入到一個臨時表#Bar

INSERT INTO #Bar 
SELECT A + B AS C FROM Foo 

和適用條件

SELECT * 
FROM #Bar 
WHERE C < 0.3 

按照執行計劃Table Insert成本86%。有沒有更好的方法來獲得C < 0.3? 我試過一個嵌套查詢,它是一樣的。

+2

不能使用where子句,比如「WHERE A + B <0.3」嗎? – Arvo 2014-09-23 13:52:14

+0

您不能只看執行計劃百分比(特別是因爲您正在比較讀取和寫入)。整個事情**總共有100%,所以很可能一件*會比另一部分計劃貴。它是相對的,並且告訴你**關於該部分查詢/批處理的實際執行時間的很少**。你必須看看提供給你的所有信息。 – alroc 2014-09-23 14:00:32

+0

那麼,A + B實際上是一個包含6個大公式的CASE – hidarikani 2014-09-23 14:03:50

回答

4

你不需要臨時表在所有的,只要選擇你想要什麼:

SELECT A, B, C = A + B 
FROM Foo 
WHERE A + B < 0.3 
0

你可以做一個單一的查詢像

SELECT C FROM 
(
SELECT A + B AS C FROM Foo 
) bar 
WHERE C < 0.3 

(OR)包含的條件in WHERE

SELECT A + B AS C FROM Foo 
WHERE A + B < 0.3 
1

所有的解決方案都可以正常工作。我只是添加了第三個選項,使用公共表格表達式來提供視圖,並且它更容易閱讀。

;WITH CTE_SELECT AS 
(
    SELECT A, B, C = A + B 
    FROM Foo 
    WHERE A + B < 0.3 
) 

SELECT * FROM CTE_SELECT 
+1

這個解決方案如何更好/不同於Tim提出的建議? – 2014-09-23 14:11:55

+1

http://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx – 2014-09-23 14:44:31