我们有一系列程序,旨在使用 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
方法效率如此低下吗?不使用主键索引吗?
开放查询比 DELETE 这样的简单查询有更好的处理程序,并且查询在远程服务器内解析
我能够使用 SQL 数据库服务器的链接服务器成功查询 Oracle 数据库:
选择 g.* 来自 [LINKED_SERVER_NAME]..[架构].[表] g