首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WHERE子句中重用字段值

在WHERE子句中重用字段值
EN

Stack Overflow用户
提问于 2015-02-24 11:45:38
回答 3查看 53关注 0票数 2

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

在表变量、临时表、CTEsor中寻找最快的选项?

SQL:

代码语言:javascript
复制
select dbo.heavyFunctionCall(a, b, c) 
from T 
where dbo.heavyFunctionCall(a, b, c) > 10
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-24 12:00:09

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

代码语言:javascript
复制
SELECT * 
FROM (
  SELECT dbo.heavyFunctionCall(a, b, c) AS x
  FROM T) a
WHERE x > 10
票数 3
EN

Stack Overflow用户

发布于 2015-02-24 12:15:47

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-02-24 14:32:11

也许这是:

代码语言:javascript
复制
select hFC.result
from T 
cross apply ( select dbo.heavyFunctionCall(T.a, T.b, T.c) result ) hFC
where hFC.result > 10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28694968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档