Tsql 重用WHERE子句中的字段值

Tsql 重用WHERE子句中的字段值,tsql,where,sql-server-2014,Tsql,Where,Sql Server 2014,如何优化以下T-SQL的性能,使heavyFunctionCall函数只被调用一次 在表格变量、临时表格、CTESO或其他表格中寻找最快的选项 SQL: 这样做只会在每行上运行函数一次,而不是两次: SELECT * FROM ( SELECT dbo.heavyFunctionCall(a, b, c) AS x FROM T) a WHERE x > 10 也许是这样: select hFC.result from T cross apply ( select dbo.h

如何优化以下
T-SQL
的性能,使
heavyFunctionCall
函数只被调用一次

在表格变量、临时表格、CTESO或其他表格中寻找最快的选项

SQL:


这样做只会在每行上运行函数一次,而不是两次:

SELECT * 
FROM (
  SELECT dbo.heavyFunctionCall(a, b, c) AS x
  FROM T) a
WHERE x > 10
也许是这样:

select hFC.result
from T 
cross apply ( select dbo.heavyFunctionCall(T.a, T.b, T.c) result ) hFC
where hFC.result > 10

您是否尝试过查看您描述的各种选项的查询计划?我没有。我对TSQL的了解是肤浅的。我认为我可以自然地使用select中的字段,但事实并非如此。
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
select hFC.result
from T 
cross apply ( select dbo.heavyFunctionCall(T.a, T.b, T.c) result ) hFC
where hFC.result > 10