为什么查询版本2这么快?
我怀疑DB Engine正在多次调用Table-Valued-Function“GetUsageStatistic”,所以有一种方法来告诉引擎“GetUsageStatistic”是确定性的,应该只调用一次?
查询版本1
--Takes ~10 minutes select * from RosterLevel r left join GetUsageStatistics( @mindate,@maxdate ) usage on r.UserID = usage.UserID;
查询版本2
--Takes ~10 seconds select * into #usage from GetUsageStatistics( @mindate,@maxdate ); select * from RosterLevel r left join #usage on r.UserID = #usage.UserID;
解决方法
正如评论中所提到的,最好的答案是分析任何执行计划是吐出来的.除此之外,您的直观可能是正确的,但除了sql Server自动尝试的任何缓存之外,我的头没有太多的意见,我可以提供查询提示的方式来表明该功能是确定性的,但欢迎尝试在
Query Hints MSDN page年提到的一些事情.我的第一个测试可能会在
Table Hints.