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