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

sql – 远程查询使用变量vs文字时缓慢

发布时间:2020-12-12 16:53:11 所属栏目:MsSql教程 来源:网络整理
导读:我搜索到处于这种情况,无法找到解决方案,除了我不想使用的动态SQL. 以下是我要在服务器2上UPDATE的表: (Stuff Id UNIQUEIDENTIFIER,stuffname NVARCHAR(64)) 我需要从服务器1更新它. 所以我一直在试图: DECLARE @newstuff nvarchar(64)SELECT @newstuff = '
我搜索到处于这种情况,无法找到解决方案,除了我不想使用的动态SQL.

以下是我要在服务器2上UPDATE的表:

(Stuff Id UNIQUEIDENTIFIER,stuffname NVARCHAR(64))

我需要从服务器1更新它.

所以我一直在试图:

DECLARE @newstuff nvarchar(64)

SELECT @newstuff = 'new stuff'

UPDATE [server2].database2.dbo.Stuff
SET stuffname=@newstuff
WHERE stuffId='4893CD93-08B3-4981-851B-5DC972288290'

这需要11秒.下一个使用文字运行不到1秒

UPDATE [server2].database2.dbo.Stuff
SET stuffname='new stuff'
WHERE stuffId='4893CD93-08B3-4981-851B-5DC972288290'

我已经比较了实际的执行计划.慢的是做远程扫描,花费100%的成本,加上其他5个步骤(过滤器,表假脱机,计算标量,远程更新,更新).快速的只是UPDATE和远程查询步骤.我需要使用变量,所以我需要一种方法来强制它远程执行整个查询.

我已经尝试使用OPTION(RECOMPILE),但是server1正在使用SQL Server 2005. server2正在使用SQL Server 2012.我无法在server2上更改数据库结构,而没有严重的问题.我没有任何认证问题.我已经尝试在更新表时进行别名.

我也试过使用Openquery.当我将id过滤器放在查询字符串中时,它会恢复到1秒以下:

UPDATE OPENQUERY([server2],'select stuffname,stuffid from database2.dbo.stufftable where contactid=''4CA1D489-9221-E511-A441-005056C00008''')
SET stuffname = @newstuff

但是我需要这个id也是一个变量,而且这个打开的查询不会带有变量(https://msdn.microsoft.com/en-CA/library/ms188427.aspx).我尝试在查询之外运行带有id过滤器的Openquery,但是在4秒钟内运行.比11好,但不是很好:

UPDATE OPENQUERY([server2],stuffid from database2.dbo.stufftable')
set stuffname=@newstuff
where contactid='4CA1D489-9221-E511-A441-005056C00008'

当然,我使用exec(@sql)运行openquery,但我真的不想这样做.我可以使用整数更新语句,甚至使用OPENQUERY,并获得相同的结果.

有没有办法让我在不使用exec(@sql)的情况下修复这个性能?

解决方法

您可以在远程端使用sp_executesql使用具有参数的动态SQL.
declare @SQL nvarchar(max);

set @SQL = 'UPDATE database2.dbo.Stuff
            SET stuffname=@newstuff
            WHERE stuffId=''4893CD93-08B3-4981-851B-5DC972288290'''

exec [server2].master.dbo.sp_executesql @SQL,N'@newstuff nvarchar(64)',@newstuff

(编辑:李大同)

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

    推荐文章
      热点阅读