oracle 删除链接服务器,SQLServer通过链接服务器远程删除数据性能问题解决

在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数据的性能问题解决 1. 问题发现 系统中有个功能,需要远程删除SQLServer实例的表数据,删除语句中有where条件,条件中有一个子查询。 该

在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数据的性能问题解决

1. 问题发现

系统中有个功能,需要远程删除SQLServer实例的表数据,删除语句中有where条件,条件中有一个子查询。

该功能前台执行速度非常慢。所以准备调优。

下面为演示代码,未优化前如下:

DELETE

FROM [LINKSERVERNAME].[AdventureWorks2008].[Sales].[SalesOrderDetail]

WHERE SalesOrderDetailID=5

AND EXISTS(SELECT TOP 1 1 FROM [LINKSERVERNAME].[AdventureWorks2008].[Sales].[SalesOrderDetail])

此时的执行计划如下图:

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fi%2F88922%2F201404%2F031627034214936.png&refer=http%3A%2F%2Fwww.cnblogs.com%2FJentleWang%2Fp%2F3643408.html

可以看到执行计划存在一个远程扫描,然后在本地执行筛选。

在远程服务器开启profiler跟踪,部分内容如下图:

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fi%2F88922%2F201404%2F031630574844161.png&refer=http%3A%2F%2Fwww.cnblogs.com%2FJentleWang%2Fp%2F3643408.html

可以看到远程服务器开启了一个游标,然后逐行读取数据并返回给调用端。

可以预见性能会非常差,如何避免不带where条件的远程扫描呢?

2. 问题解决

2.1 OpenQuery

使用OpenQuery将delete数据的筛选提交到远程服务器执行。

DELETE

FROM OPENQUERY([LINKSERVERNAME],'SELECT *

FROM [AdventureWorks2008].[Sales].[SalesOrderDetail]

WHERE SalesOrderDetailID=5

AND EXISTS(SELECT TOP 1 1 FROM [AdventureWorks2008].[Sales].[SalesOrderDetail])')

此时,执行计划如图:

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fi%2F88922%2F201404%2F031638069682686.png&refer=http%3A%2F%2Fwww.cnblogs.com%2FJentleWang%2Fp%2F3643408.html

2.2 sp_executesql

将整个delete语句提交到远程执行

DECLARE @sql nvarchar(max)SELECT @sql ='DELETE

FROM [AdventureWorks2008].[Sales].[SalesOrderDetail]

WHERE SalesOrderDetailID=5

AND EXISTS(SELECT TOP 1 1 FROM [AdventureWorks2008].[Sales].[SalesOrderDetail])'

exec [LINKSERVERNAME].[AdventureWorks2008].dbo.sp_executesql @sql

profiler跟踪到的语句如下:

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fi%2F88922%2F201404%2F031642284531434.png&refer=http%3A%2F%2Fwww.cnblogs.com%2FJentleWang%2Fp%2F3643408.html

如有不对的地方,欢迎拍砖;如有其他方法,求分享,谢谢!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值