SQL Server DELETE OPENQUERY 性能

问题描述 投票:0回答:2

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

我们注意到以下查询的数量级比预期要长。

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
方法效率如此低下吗?不使用主键索引吗?

sql-server database-performance openquery
2个回答
0
投票

开放查询比 DELETE 这样的简单查询有更好的处理程序,并且查询在远程服务器内解析


0
投票

我能够使用 SQL 数据库服务器的链接服务器成功查询 Oracle 数据库:

选择 g.* 来自 [LINKED_SERVER_NAME]..[架构].[表] g

© www.soinside.com 2019 - 2024. All rights reserved.