Tri*_*nko 10 sql performance caching deterministic user-defined-functions
为什么查询版本2要快得多?
我怀疑数据库引擎多次调用表值函数"GetUsageStatistic",所以有没有办法告诉引擎"GetUsageStatistic"是确定性的,应该只调用一次?
查询版本1
--Takes ~10 minutes
select *
from RosterLevel r
left join GetUsageStatistics( @mindate, @maxdate ) usage on r.UserID = usage.UserID;
Run Code Online (Sandbox Code Playgroud)
查询版本2
--Takes ~10 seconds
select * into #usage from GetUsageStatistics( @mindate, @maxdate );
select *
from RosterLevel r
left join #usage on r.UserID = #usage.UserID;
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,最好的答案是分析吐出的任何执行计划。除此之外,你的直觉可能是对的,但除了 SQL Server 自动尝试的任何缓存之外,我并没有想到你可以提供的查询提示来表明该函数是确定性的,但欢迎你尝试MSDN 查询提示页面中提到了一些内容。我的第一个测试可能会利用Table Hints。