需要帮助使用串联表改进 SQL 存储过程的运行时间



我的一个客户有两个总部。每个 HO 都有近 300 个工作站,我的客户不想将所有信息复制到一个 HO 中,所以他问我是否可以将一些信息放入辅助表中,其中作业从 HO 2 到 HO 1 对于某些报告......这部分已经完成,我没有问题,但是当我不得不修改报告的存储过程时,真正的问题出现了。

在我有这样的代码之前:

SELECT D.IdDocument, D.etc...
FROM Document D (NOLOCK)
  JOIN OtherTable OT (NOLOCK) on etc...

现在我已经这样尝试了:

1)第一次尝试:

SELECT DXD.IdDocument, DXD.etc...
FROM 
(
  SELECT D.*
  FROM Document D (NOLOCK)
  UNION ALL
  SELECT D2.*
  FROM RemoteDocument D2 (NOLOCK)
) DXD
  JOIN OtherTable OT on etc...

2)第二次尝试:

CREATE TABLE #TempDocument
(
  IdDocument INT,
  IdLocation INT,
  etc..
)
CREATE INDEX IDX_TMP_Document ON #TempDocument (IdDocument, IdLocation)
INSERT INTO #TempDocument
SELECT DXD.*
FROM 
(
  SELECT D.*
  FROM Document D (NOLOCK)
  UNION ALL
  SELECT D2.*
  FROM RemoteDocument D2 (NOLOCK)
) DXD
SELECT DXD.IdDocument, DXD.etc...
FROM #TempDocument DXD
  JOIN OtherTable OT (NOLOCK) on etc...
问题是,

在 sp 运行 5-10 分钟之前,现在是 30-40 分钟,检测到执行计划的主要问题是使用联合的联合/插入......

有人可以在使用之前告诉我一种更好/更快的方法来连接信息吗?

我建议您使用链接服务器。然后,一旦您创建了链接服务器。在其中一个系统上创建链接服务器的视图。

Server 1:
   Linked Servers:
       Server 2
   Views:
     MyNewView(Select * from openquery(linkedServer,'Select * from SomeDB.dbo.SomeTable')

这样做时。主服务器从视图中缓存数据。因此,您现在可以在一台服务器上工作,并且返回时间应该相当快,具体取决于您过滤和返回的数据量。

要设置链接服务器,请查看以下文章:此处。

这实际上并没有整合,但它希望可以改善一些速度问题,并允许您像在单个数据库中一样编写。清理代码并防止任何其他通信问题作为唯一的通信问题@链接服务器端。

最新更新