电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

sql server 2019智能查询_表变量延迟编译特性

来源:金蝶云社区作者:金蝶2024-09-233

sql server 2019智能查询_表变量延迟编译特性

问题简介

       SQL Server使用表变量进行表关联操作时,当表变量的值较大,并且关联表的数据量非常庞大时,性能表现并不好,其根源在于生成的执行计划低效。

虽然SQL Server官网上说可以通过重新编译等查询提示来改善,但实际上并没有效果。

       但在SQL Server2019(安装SP1)后,提到了一个智能查询处理的优化,尝试进行相关测试验证,发现效果改善明显。

验证过程

     环境说明

       T_ORG_AUTOALLOCLOGDETAIL_L数据量55423811

       T_ORG_AUTOALLOCLOGDETAIL   数据量840300

测试SQL语句如下(以主键字段作为过滤条件):

        declare @t as udt_inttable

        insert into @t select top 500000 fpkid from T_ORG_AUTOALLOCLOGDETAIL_L order by FPKID desc

        select * from T_ORG_AUTOALLOCLOGDETAIL_L u

        join T_ORG_AUTOALLOCLOGDETAIL v on u.FPKID=v.FID

        join @t t on t.FID=v.FID

测试过程一

SQL Server 2016执行计划  

SQL Server 2019执行计划

执行计划对比

l  SQL Server 2019下采用自适应联接替代了SQL Server2016下的嵌套循环

l  T_ORG_AUTOALLOCLOGDETAIL在SQL Server 2016下扫描的次数为5000000,而在SQL Server2019下只有1次

l  SQL Server 2016下SQL取数执行的时间为7351毫秒,而在SQL Server 2019下只需要522毫秒

小结

       可以看到IO的减少,让性能提升了14倍。

测试过程二

       上面测试的SQL语句是以主键进行关联,很多时候,实际上并非主键字段关联,所以以非主键进行测试验证,看实际情况如何?

进一步测试,改用其他字段进行比较

       测试语句,使用FDETAILTITLE字段选择50条数据作为过滤条件

declare @t as udt_varchartable

insert into @t

select top 50 fid from (select distinct  FDETAILTITLE as fid from T_ORG_AUTOALLOCLOGDETAIL_L) t order by FID desc

select * from T_ORG_AUTOALLOCLOGDETAIL_L u

join T_ORG_AUTOALLOCLOGDETAIL v on u.FPKID=v.FID

join @t t on t.FID=u.FDETAILTITLE

where u.FLOCALEID=2052

SQL Server 2016执行计划

SQL Server 2019执行计划

执行计划对比

       三个主要变化

l  表变量进行计算标量后,sql server 2016下由50行变成了1行,sql server 2019下,依然是50行。这里说明数据已经出现了差异

l  T_ORG_AUTOALLOCLOGDE

sql server 2019智能查询_表变量延迟编译特性

问题简介 SQL Server使用表变量进行表关联操作时,当表变量的值较大,并且关联表的数据量非常庞大时,性能表现并不好,其根源在于...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信