1. ホーム
  2. sql-server

[解決済み] SQL Server リンクサーバーのクエリ例

2022-03-07 14:45:48

質問

Management Studioで、2つのリンクされたサーバー間でクエリを実行したり、ジョインを行おうとしています。 これは、リンクされたデータベースサーバーを使用する正しい構文でしょうか?

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

基本的には、db.tableの前にdbサーバー名を付けるだけなのでしょうか?

どのように解決するのですか?

フォーマットはおそらくこうです。

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

例えば データベースサーバー1.db1.dbo.table1


更新情報 : これは古い質問であり、私が持っている答えは正しいのですが、この質問に遭遇した人はいくつかのことを知っておくべきだと思います。

すなわち、リンクされたサーバーに対して結合の状況でクエリを実行すると ENTIRE テーブルが、リンクされたサーバーから おそらく クエリが実行されるサーバーにダウンロードされ、結合処理が行われます。 OPのケースでは、両方の table1 から DB1table1 から DB2 は、その全体がクエリを実行しているサーバに転送されます。 DB3 .

大きなテーブルがある場合、この かもしれません その結果、操作の実行に長い時間がかかることになります。 結局のところ、メモリやディスクの転送速度よりも何桁も遅いネットワークトラフィックの速度に制約されることになるのです。

可能であれば、ローカルテーブルと結合せずに、リモートサーバーに対して1つのクエリを実行し、必要なデータを一時テーブルに取り込みます。 その後、そのテーブルからクエリーを実行します。

それが不可能な場合は、SQLサーバーがローカルにテーブル全体をロードしなければならない原因となる様々なことを調べる必要があります。 例えば GETDATE() また、特定の結合を行うこともできます。 その他、パフォーマンスを低下させる要因として、適切な権限が与えられていないことが挙げられます。

参照 http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ をご覧ください。