【发布时间】:2019-05-06 12:29:38
【问题描述】:
你们认为哪一个更高效(负载更少)?
SELECT t1.a,
(CASE
WHEN t1.p=1 THEN t2.g
WHEN t1.p=2 THEN t3.g
END) as v
FROM t1
LEFT JOIN t2 ON t1.x=t2.x
LEFT JOIN t3 ON t1.y=t3.y
或
SELECT
t1.a, t2.v
FROM t1
outer apply (
SELECT v= CASE
WHEN t1.p=1 THEN (SELECT v FROM t2 WHERE t1.x=t2.x)
WHEN t1.p=2 THEN (SELECT v FROM t3 WHERE t1.y=t3.y)
END
) t2
只是想弄清楚sql引擎是如何工作的..
[我想在这个问题中研究什么]
在第一个查询中,表t2 和t3 将始终被调用,但在第二个查询中,它们仅在大小写匹配时才会被调用(因此负载较少 = 仅检查 2 个表而不是每行 3 个)?
【问题讨论】:
-
执行计划怎么说?设置比较结果的统计信息?
标签: sql tsql join left-join outer-apply