0
如果這兩條語句在性能方面是等價的,我想知道:大量使用ISNULL的對嵌套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
兩個語句是函數等價的(不是嗎?),但常識會提示第二個語句比較慢,因爲我們在應用WHERE子句之前「枚舉」T1 LEFT JOIN T2。但是它真的很慢,還是SQL Server有辦法優化它們並使它們等同?
的事情是寫它可以變得很討厭當你有幾個列從左連接使用,而第二種方式約束醜陋只嵌套SELECT的第一種方式。
在這兩個語句中,'ISNULL(T2.COL1,T1.COL1) '可以簡寫爲:'T1.COL1' – 2012-02-09 07:02:40
這是正確的!當我寫它時,我簡化了它。我編輯了我的問題,並更改了ISNULL語句中的列。 – 2012-02-09 07:20:13
您也可以將它重寫爲兩個類似(但條件更簡單)查詢的'UNION'。 – 2012-02-09 07:22:23