Besoin d'aide pour améliorer le time d'exécution de la procédure stockée SQL avec des tables concaténées

Un de mes clients a deux sièges sociaux. Chaque HO a près de 300 posts de travail et mon client ne veut pas reproduire toutes les informations dans un seul HO, alors il a demandé si je peux get des informations dans les tables secondaires avec des emplois de HO no. 2 à HO no. 1 pour certains rapports … Cette partie est terminée et je n'ai eu aucun problème mais le vrai problème est apparu quand j'ai dû modifier la procédure stockée pour les rapports.

Avant j'avais le code comme ceci:

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

Maintenant, j'ai essayé comme ça:

1) Première tentative:

 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) Deuxième tentative:

 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... 

Le problème est que avant que le sp couru en 5-10 minutes et maintenant 30-40 minutes, le principal problème que le plan d'exécution détecté est dans l'union / insert en utilisant l'union …

Quelqu'un peut-il me dire un moyen meilleur / plus rapide de concaténer l'information avant de l'utiliser?

Je reorderais que vous utilisiez un server lié. Ensuite, une fois que vous avez créé le server lié. Créez une vue sur le server lié sur l'un de vos systèmes.

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

En faisant cela. Votre server principal met en cache datatables de la vue. Vous pouvez maintenant travailler sur un server et l'heure de return devrait être assez rapide en fonction de la quantité de données que vous filterz et renvoyez.

Pour configurer un server lié, veuillez lire l'article suivant: Ici.

Cela ne consolide pas réellement, mais il devrait, espérons-le, améliorer certains problèmes de vitesse et vous permettre d'écrire comme si vous étiez dans une database unique. Nettoyer votre code et éviter tout autre problème de communication comme seul problème de communication à la fin du server lié.