J'ai deux serveurs de base de données, connectés via des serveurs liés. Les deux sont des bases de données SQL Server 2008R2 et la connexion au serveur lié est établie via un lien "SQL Server" normal, en utilisant le contexte de sécurité de la connexion actuelle. Les serveurs liés sont tous les deux dans le même centre de données, donc la connexion ne devrait pas être un problème.
J'utilise la requête suivante pour vérifier quelles valeurs de la colonne identifier
sont disponibles à distance, mais pas localement.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
Sur les deux tables se trouvent des index non clusterisés sur la colonne identifier
. Localement, il y a environ 2,6 millions de lignes, à distance seulement 54. Pourtant, quand on regarde le plan de requête, 70% du temps d'exécution est consacré à "exécuter une requête distante". En outre, lorsque vous étudiez le plan de requête complet, le nombre de lignes locales estimées est à la 1
place de 2695380
(qui est le nombre de lignes estimées lorsque vous sélectionnez uniquement la requête suivante EXCEPT
).
Lors de l'exécution de cette requête, cela prend en effet beaucoup de temps.
Cela me fait me demander: pourquoi est-ce? Est-ce que l'estimation est "juste" loin ou les requêtes distantes sur des serveurs liés sont-elles vraiment si chères?