sql – 为什么当我(手动)缓存临时表中的表值函数的结果时,为什么
发布时间:2020-12-12 08:26:14 所属栏目:MsSql教程 来源:网络整理
导读:为什么查询版本2这么快? 我怀疑DB Engine正在多次调用Table-Valued-Function“GetUsageStatistic”,所以有一种方法来告诉引擎“GetUsageStatistic”是确定性的,应该只调用一次? 查询版本1 --Takes ~10 minutesselect *from RosterLevel rleft join GetUsage
为什么查询版本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.(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |