微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用存储在tempdb中的值更新同义词表

如何解决使用存储在tempdb中的值更新同义词表

我在更新同义词表方面遇到性能问题。

我有两个sql Server:

  • 服务器A(2017 DEV)
  • 服务器B(2008 R2 DEV)

,它们通过链接的服务器进行通信(排序规则兼容= TRUE)。 我在服务器A上有一个日志表(假设为T),在服务器B上有此表的同义词。

以下代码需要10秒钟来更新单个值(!)

DECLARE @VAR nvarchar(max),@guid uniqueidentifier

SET @VAR = 'TEST VALUE'
SET @guid = 'some value'

UPDATE LogTable 
SET SizeKB=SizeKB+isnull(DATALENGTH(@VAR)/1024.0,0) 
WHERE LogTable_guid=@guid

执行计划:

enter image description here

但是这段代码不到1秒的时间

DECLARE @guid uniqueidentifier

SET @guid = 'some value'
    
UPDATE LogTable 
SET SizeKB=SizeKB+isnull(DATALENGTH('TEST VALUE')/1024.0,0) 
WHERE LogTable_guid=@guid

执行计划:

enter image description here

代码占用的时间少于1

DECLARE @VAR nvarchar(max),@guid uniqueidentifier,@temp float

SET @VAR = 'TEST VALUE'
SET @guid = 'some value'

SELECT @temp = SizeKB
FROM LogTable 
WHERE LogTable_guid=@guid

SET @temp = @temp+isnull(DATALENGTH(@VAR)/1024.0,0)

UPDATE LogTable 
SET SizeKB=@temp 
WHERE LogTable_guid=@guid

执行计划:

enter image description here

我不是在寻找解决方法,而是想了解为什么DATALENGTH中的变量与何时只有变量的值在执行计划上存在差异。

这种行为不仅限于DATALENGTH。我尝试了LEN()和SUBSTRING(),它们都具有与上述相同的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。