sql – 为什么当我(手动)缓存临时表中的表值函数的结果时,为什么查询执行得更快?

前端之家收集整理的这篇文章主要介绍了sql – 为什么当我(手动)缓存临时表中的表值函数的结果时,为什么查询执行得更快?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么查询版本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.

猜你在找的MsSQL相关文章