加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读