Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server Linked Server-Beispielabfrage

Das Format sollte wahrscheinlich sein:

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

Beispiel:Datenbankserver1.db1.dbo.table1

Aktualisieren :Ich weiß, dass dies eine alte Frage ist, und die Antwort, die ich habe, ist richtig; Ich denke jedoch, dass jeder, der darüber stolpert, ein paar Dinge wissen sollte.

Nämlich, wenn bei einem verknüpften Server in einer Join-Situation die ENTIRE abgefragt wird Tabelle vom Verbindungsserver wahrscheinlich auf den Server heruntergeladen werden, von dem die Abfrage ausgeführt wird, um den Join-Vorgang durchzuführen. Im Fall des OP sowohl table1 von DB1 und table1 von DB2 werden vollständig an den Server übertragen, der die Abfrage ausführt, vermutlich mit dem Namen DB3 .

Wenn Sie große Tabellen haben, kann dies möglich sein führen zu einer Operation, deren Ausführung viel Zeit in Anspruch nimmt. Schließlich wird es jetzt durch die Geschwindigkeit des Netzwerkverkehrs eingeschränkt, die um Größenordnungen langsamer ist als die Übertragungsgeschwindigkeit des Speichers oder sogar der Festplatte.

Führen Sie nach Möglichkeit eine einzelne Abfrage auf dem Remoteserver durch, ohne einer lokalen Tabelle beizutreten, um die benötigten Daten in eine temporäre Tabelle zu ziehen. Dann fragen Sie das ab.

Wenn dies nicht möglich ist, müssen Sie sich die verschiedenen Dinge ansehen, die dazu führen würden, dass der SQL-Server die gesamte Tabelle lokal laden muss. Zum Beispiel mit GETDATE() oder sogar bestimmte Verknüpfungen. Andere Leistungskiller sind die Nichtvergabe angemessener Rechte.

Weitere Informationen finden Sie unter http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/.