0
SELECT:ヘビー使用ネストされたこれらの二つの文は、パフォーマンスの面で同等である場合、私は疑問に思って
ステートメント1:
SELECT
ISNULL(T2.COL4, T1.COL4)
FROM
T1 LEFT JOIN T2 ON T1.COL1 = T2.COL1
JOIN T3 ON T2.COL1 IS NULL AND T3.COL2 = T1.COL2 OR T3.COL2 = T2.COL2
WHERE
T3.COL3 = @COL3
書2:
SELECT
T1.COL4
FROM
(SELECT
ISNULL (T2.COL4, T1.COL4) COL4,
ISNULL (T2.COL2, T1.COL2) COL2
FROM T1 LEFT JOIN T2 ON T1.COL1 = T2.COL1) T1
JOIN T3 ON T1.COL2 = T3.COL2
WHERE
T3.COL3 = @COL3
2 WHERE句を適用する前にT1 LEFT JOIN T2を "列挙"しているため、2番目の文の方が遅いことを常識的に示唆しています。しかし、それは本当に遅いですか、またはSQL Serverはそれらを最適化して同等にする方法を持っていますか?
2番目の方法はネストされたSELECTだけの醜さを抑制するのに対して、使用する左側の結合から複数の列がある場合は、それを書く最初の方法は本当に厄介なことがあります。
、 'ISNULL(T2.COL1、T1.COL1) 'は次のように書くことができます:' T1.COL1' –
これは正しいです!私はそれを書いたときにそれを単純化しました。私は自分の質問を編集し、ISNULLステートメントの列を変更しました。 –
2つの類似した(より単純な条件の)クエリの 'UNION 'として書き換えることもできます。 –