Prawdopodobnie powinien mieć format:
<server>.<database>.<schema>.<table>
Na przykład: DatabaseServer1.db1.dbo.table1
Aktualizacja : wiem, że to stare pytanie, a odpowiedź, którą mam, jest poprawna; jednak myślę, że każdy, kto się na to natknie, powinien wiedzieć kilka rzeczy.
Mianowicie, podczas wysyłania zapytań do serwera połączonego w sytuacji łączenia, CAŁA tabela z serwera połączonego zostanie prawdopodobnie pobrana na serwer, z którego zapytanie jest wykonywane w celu wykonania operacji łączenia. W przypadku OP, zarówno table1
z , jak DB1
i table1
z DB2
zostaną przesłane w całości do serwera wykonującego zapytanie, przypuszczalnie nazwanego DB3
.
Jeśli masz duże tabele, może to spowodować wykonanie operacji, której wykonanie zajmie dużo czasu. W końcu jest teraz ograniczony przez prędkości ruchu sieciowego, które są o rząd wielkości wolniejsze niż pamięć, a nawet prędkości transferu dysku.
Jeśli to możliwe, przeprowadź pojedyncze zapytanie względem serwera zdalnego, bez dołączania do tabeli lokalnej, aby pobrać potrzebne dane do tabeli tymczasowej. Następnie zapytaj o to.
Jeśli nie jest to możliwe, należy przyjrzeć się różnym rzeczom, które spowodowałyby, że serwer SQL musiałby lokalnie załadować całą tabelę. Na przykład użycie GETDATE()
lub nawet niektórych złączeń. Inni zabójcy wydajności obejmują nieprzyznawanie odpowiednich praw.
Więcej informacji można znaleźć pod adresem http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ .