首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在where子句中使用函数:函数被计算了多少次?

在where子句中使用函数:函数被计算了多少次?
EN

Stack Overflow用户
提问于 2015-04-25 01:09:56
回答 3查看 445关注 0票数 3

如果我在where子句中使用一个函数,它会被计算多少次?我想知道在更复杂的查询中对性能的影响。

示例:

代码语言:javascript
复制
select 
col1, col2, expirationDate
from someTable
where expirationDate > getdate()

对比

代码语言:javascript
复制
declare @today date = getdate()
select 
col1, col2, expirationDate
from someTable
where expirationDate > @today
EN

回答 3

Stack Overflow用户

发布于 2015-04-25 01:16:15

It is only evaluated once.

FTA:

SQL Server有一个称为“运行时常量”的概念,其中一些表达式从树中拉出并在提取行之前执行。结果被缓存并在查询中的所有位置重用。..。getdate()是一个

票数 3
EN

Stack Overflow用户

发布于 2015-04-25 01:13:13

如果我没记错的话,Sql server将GETDATE()作为确定性执行进行求值,并且只对GETDATE()求值一次,而不是针对每一行。

GETDATE编辑:我想我错了-- GETDATE()总是不确定的。相反,GETDATE()被视为查询中的运行时常量函数。Here是一篇解释它的文章。

票数 0
EN

Stack Overflow用户

发布于 2015-04-25 10:17:11

通常情况下,您不应在函数中包含要过滤的列。

由于您没有将expirationDate封装在任何函数中,因此查询优化器可以在编译时访问列expirationDate的值,因此它不会影响性能(即,如果您在expirationDate上有一个索引)

对于example,如果expirationDate被封闭在某个函数中,比如DATEPART,那么编译器将不会选择索引而不是该列,即使它存在。

此外,如上所述,GETDATE()被视为一个runtime constant function,其中表达式从树中拉出并在提取行之前执行。然后将结果缓存并在查询中的所有位置重复使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29853501

复制
相关文章

相似问题

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