如何优化以下T-SQL
的效果,以便heavyFunctionCall
函数只调用一次。
寻找表变量,临时表,CTEs或其他东西中最快的选项吗?
SQL:
select dbo.heavyFunctionCall(a, b, c)
from T
where dbo.heavyFunctionCall(a, b, c) > 10
答案 0 :(得分:3)
这样做只会在每一行上运行一次而不是两次:
SELECT *
FROM (
SELECT dbo.heavyFunctionCall(a, b, c) AS x
FROM T) a
WHERE x > 10
答案 1 :(得分:1)
declare proc tst (@x int) -- set @x whatever you want.
-- the execution plan will be the same.
as
begin
SELECT *
FROM (
SELECT dbo.heavyFunctionCall(a, b, c) AS result
FROM T) resultx
WHERE result > @x
end
答案 2 :(得分:1)
也许这个:
select hFC.result
from T
cross apply ( select dbo.heavyFunctionCall(T.a, T.b, T.c) result ) hFC
where hFC.result > 10