2015-11-14 94 views
0

如果我使用以下內容,我在4分鐘內檢索到大約1,60,000行。SQL Server查詢性能問題

SELECT DISTINCT * 
FROM 
    (ABOUT 10 TABLES WITH LEFT OUTER JOIN) 

但我需要提取只有約25列與他們的一些基本操作。但我的下面的查詢是永遠執行(超過一個小時)。

Col1,Col2等,ColA,ColB等代表欄。另外我需要對它們進行DISTINCT處理,因爲這是我需要的最終版本。

SELECT DISTINCT 
    Col1, Col2,...Col23, 
    Table1.Description1 + Table1.Description2 as FinalDescription, 
    (CASE WHEN COLA = 'XX' THEN 
      cast(round(COLB,2) as numeric(10,2)) 
      ELSE 
      cast(round(COLB*-1 ,2) as numeric(10,2)) 
    END) AS 'Amount', 
    CASE WHEN ISNULL(COLC,'')='' 
      THEN COLD + 'TO' + COLE 
     WHEN SUBSTRING (COLC ,1 , 3)IN ('XY') 
      THEN COLD+','+ SUBSTRING (COLE ,5 , 12) 
     ELSE COLD + ','+ COLF 
    END as 'Custom_Column' 
FROM 
    (ABOUT 10 TABLES WITH LEFT OUTER JOIN) 

我該怎麼做才能提高性能以獲得我感興趣的格式的列?

+1

第一:比較查詢計劃(CTRL-L)。第二:弄清楚爲什麼你需要獨特。你有沒有不正確的加入? –

+0

我沒有任何內部連接。由於表格設計不正確且存在重複,因此需要區別。這是如何設置的。無法更改設置。也沒有權限查看查詢計劃。 –

+0

運行您的查詢與金額列刪除,然後再運行它刪除Custom_Coulmn。你會知道哪些是有問題的。 – Adish

回答

1

如果你運行你的第二個查詢沒有不同的更快?也許你可以計算你的自定義列,然後執行聯合。

SELECT *, 'Amount', 'Custom_Column' 
    FROM Your Query 
    UNION 
    SELECT 0.*, 0 as 'Amount', 0 as 'Custom_Column' 

無論如何,如果你提供一個解釋計劃並告訴我們你的數據庫是什麼,我們可以給你更好的建議。

0

下面的CASE語句導致問題。我只是從SELECT中刪除它,但不會改變任何加入條件&它很快完成。我不確定爲什麼下面這個簡單的案例陳述導致了性能問題。有關如何改善這一點的任何輸入?

(CASE WHEN tabled.col5 = 'ABCD' THEN 'ABCD' 

    ELSE 'UVWX' END) AS [Mode],