2016-03-28 65 views
0

我们有一系列旨在使用OPENQUERY和数据库链接服务器将数据从一个SQL Server数据库移动到另一个SQL Server数据库的程序。SQL Server DELETE OPENQUERY性能

我们注意到,诸如以下的查询的订单数量远超预期。

DELETE OPENQUERY(server, 'SELECT * FROM table WHERE pkf1 = ''v1'' AND pkf2 = ''v2''') 

例如,如果上述被改写为:

exec('DELETE * FROM table WHERE pkf1 = ''v1'' and pkf2 = ''v2''') at server 

DELETE FROM server.schema.table WHERE pkf1 = 'v1' and pkf2 = 'v2' 

相比于使用OPENQUERY分钟性能是只用几秒钟。

有人可以解释为什么OPENQUERY方法是比较低效率吗?它不使用主键索引吗?

+0

内解决,你可以看看这里https://support.microsoft.com/en-us/kb/309182 – jthalliens

+0

“订单数量远超预期”。你的期望被误导了。我想缓慢的查询在删除前本地传输记录,而快速的查询则不会。 OPENQUERY在本地返回一个结果集,其他方法不会。尽管我不熟悉'at server'语法。有趣。当然,这告诉你操作发生在服务器而不是客户端。 –

回答

0

打开查询比DELETE一样简单的查询,更好的处理程序,查询远程服务器