经过大量的研究和实验,我想我会尝试获得一些专家的建议。
我正在维护一个作为作业执行的存储过程。它创建了一个带有很好定义的数据的表。然后它使用 OpenQuery 收集一些数据并将其插入到表中。
例子:
insert into LOCAL_TABLE
select *
from OPENQUERY(linked_server, 'select * from linktable')
openquery 的结果是 250 万行。这大约需要 2 个小时才能完成。
数据库服务器是 iSeries,所以我使用 Visual Explain 运行查询,查询在大约 1 秒内完成。我正在从 MS SQL Server 2016 运行查询。两台服务器彼此相邻,通过千兆交换机连接。
我试图确定这里的瓶颈,我相信它是 INSERT。
我已阅读有关 BULK INSERT 的信息,看来我无法将 BULK INSERT 与 OpenQuery 一起使用。
我已阅读有关 OPENROWSET(BULK... ) 的信息,但我认为我不能使用链接服务器。我必须维护使用链接服务器,以便如果服务器更改代码不需要更新。
最后,将其作为 SELECT * INTO 运行可能会提高性能,但数据类型将由结果集定义。我想一旦它是本地的,我就可以从那里使用它,但我想在开始之前确认这是值得的。
关于如何提高性能的任何建议?