2012-10-01 82 views
2

我在看SSMS工具執行計劃分析器,它說要嘗試把它分解成更小的塊。以下查詢是我可以做「這個」的最佳方式嗎?任何幫助深表感謝!SQL內部連接與表別名' - 我可以優化此查詢嗎?

SELECT t1.ID, 
t1.col2, 
t1.col3, 
t1.col4, 
t2.ID AS table2ID, 
t2.col2, 
t1.col5, 
t1.col6, 
t2.StatusID as table2StatusID 
CASE WHEN LEN(t2.ErrorMessage) > 0 THEN t3.StatusName + ' ' + t2.ErrorMessage 
      ELSE t3.StatusName 
    END AS SomeStatus, 
    t3.StatusTypeID AS StatusTypeID 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.ID = t2.ID 
INNER JOIN table3 t3 ON t2.StatusID = t3.StatusID` 
+2

究竟是什麼是你試圖分成更小的塊「它」? –

+0

「它」是我想的整個查詢。我是SQL新手,執行計劃分析器表示將此查詢分解爲更小的塊,並可能使用臨時表。 –

+0

我試圖優化查詢運行的速度 –

回答

0

您可以用ISNULL()替換您的大小寫,這可能會降低每行處理成本。

t3.StatusName + ISNULL(' ' + t2.ErrorMessage, '') as SomeStatus 

不知道您的架構設置很多,很難說明可以在哪裏進行優化。直觀的優化可能違背業務邏輯並且毫無用處。另一種方法是事實,如果不瞭解業務邏輯,可能會有一些捷徑來獲取不明顯的數據。

+0

感謝您的建議!我剛開始在一家公司工作,我很猶豫是否真的要揭示任何事情,所以我儘量保持非常具體的事情,但我同意你的看法,知道更多會幫助哈哈。 –

+0

@WillWeld不用擔心。 :) – jTC

0

查詢看起來很直截了當。我會有一個建議是,如果你可以改變t2.ErrorMessage爲空,如果它不存在,那麼你可以使用IsNull vs CASE,它可以更有效。