1. ホーム
  2. sql-server

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

2022-11-01 07:40:18

質問

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>

例えば DatabaseServer1.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/ をご覧ください。