2

SSMS Tools Execution Plan Analyzer を見ていましたが、それを小さなチャンクに分割してみるように言われました。次のクエリは、「これ」を実行できる最善の方法ですか? どんな助けでも大歓迎です!

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`
4

2 に答える 2

0

case when を ISNULL() に置き換えると、行ごとの処理コストが削減される可能性があります。

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

スキーマのセットアップについてよく知らなければ、どこで最適化を行うことができるかを判断するのは困難です。直感的な最適化は、ビジネス ロジックに反し、役に立たない可能性があります。ビジネスロジックを知らなければ明らかではないデータを取得するためのショートカットがいくつかある可能性があります。

于 2012-10-01T19:48:09.293 に答える
0

クエリはかなり簡単に見えます。私が持っている1つの提案は、t2.ErrorMessageが存在しない場合にnullに変更できる場合、より効率的なIsNull vs CASEを使用できることです。

于 2012-10-01T19:44:14.413 に答える