Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exemple de requête de serveur lié SQL Server

Le format devrait probablement être :

<server>.<database>.<schema>.<table>

Par exemple :DatabaseServer1.db1.dbo.table1

Mettre à jour :Je sais que c'est une vieille question et la réponse que j'ai est correcte; cependant, je pense que toute autre personne qui tombe dessus devrait savoir certaines choses.

À savoir, lors d'une requête sur un serveur lié dans une situation de jointure, le ENTIRE table du serveur lié sera probable être téléchargé sur le serveur à partir duquel la requête s'exécute afin d'effectuer l'opération de jointure. Dans le cas de l'OP, à la fois table1 de DB1 et table1 depuis DB2 seront transférés dans leur intégralité au serveur exécutant la requête, vraisemblablement nommé DB3 .

Si vous avez de grandes tables, cela peut entraîner une opération longue à exécuter. Après tout, il est maintenant limité par la vitesse du trafic réseau qui est beaucoup plus lente que la vitesse de transfert de la mémoire ou même du disque.

Si possible, effectuez une seule requête sur le serveur distant, sans rejoindre une table locale, pour extraire les données dont vous avez besoin dans une table temporaire. Ensuite, interrogez-vous sur cela.

Si ce n'est pas possible, vous devez examiner les différentes choses qui obligeraient le serveur SQL à charger la table entière localement. Par exemple en utilisant GETDATE() voire certaines jointures. D'autres tueurs de performance incluent le fait de ne pas accorder les droits appropriés.

Voir http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ pour plus d'informations.