【发布时间】:2014-05-10 17:13:39
【问题描述】:
需要重做一个使用当前日期 (getdate()) 选择项目的查询(大量内连接,大约有 20 个表)。
请求是允许用户指定某个日期而不是getdate()。
将变量@mydate 声明为datetime = getdate(),并将查询中的所有getdate() 替换为@mydate。
查询执行时间从 10 秒跃升至 6 分钟!并且执行计划完全改变了。
花了很长时间调查为什么会发生这种情况,最后是
option (optimize for (`@mydate = '2000-01-01'`))
成功了——尽管在我看来这似乎是不必要的,因为我的变量定义看起来像
declare @mydate as datetime = getdate()
并且不应该为变体解释留出空间?
我的问题:
T-SQL 中的一般建议是在所有查询中指定变量示例值还是只是 datetime 一个(可能,根据我的经验,这不是一般问题)问题?
【问题讨论】:
-
一般来说,值和数据类型都不是问题,包括
datetime。这是您的具体情况,我们无法确定,因为您几乎没有向我们提供任何信息。
标签: sql-server tsql datetime execution-time