Das Format sollte wahrscheinlich sein:
<server>.<database>.<schema>.<table>
Zum Beispiel: DatabaseServer1.db1.dbo.table1
Aktualisieren : Ich weiß, dass dies eine alte Frage ist und die Antwort, die ich habe, richtig ist. Ich denke jedoch, dass jeder andere, der darüber stolpert, ein paar Dinge wissen sollte.
Beim Abfragen eines Verbindungsservers in einer Verknüpfungssituation wird nämlich die GESAMTE Tabelle vom Verbindungsserver wahrscheinlich auf den Server heruntergeladen, von dem die Abfrage ausgeführt wird, um die Verbindungsoperation auszuführen. Im Fall des OP werden sowohl table1
von DB1
als auch table1
von DB2
vollständig an den Server übertragen, der die Abfrage ausführt, vermutlich benanntDB3
.
Wenn Sie große Tabellen haben, kann dies sein dies zu einem Vorgang führen, dessen Ausführung lange dauert. Immerhin wird es jetzt durch Netzwerkverkehrsgeschwindigkeiten eingeschränkt, die um Größenordnungen langsamer sind als Speicher- oder sogar Plattenübertragungsgeschwindigkeiten.
Führen Sie nach Möglichkeit eine einzelne Abfrage für den Remoteserver durch, ohne sich einer lokalen Tabelle anzuschließen, um die benötigten Daten in eine temporäre Tabelle zu ziehen. Dann fragen Sie ab.
Wenn dies nicht möglich ist, müssen Sie sich die verschiedenen Dinge ansehen, die dazu führen würden, dass SQL Server die gesamte Tabelle lokal laden muss. Zum Beispiel mit GETDATE()
oder sogar bestimmten Joins. Andere Leistungskiller schließen ein, keine angemessenen Rechte zu gewähren.
Weitere Informationen finden Sie unter http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ .