形式はおそらく次のようになります:
<server>.<database>.<schema>.<table>
例:DatabaseServer1.db1.dbo.table1
更新 :これは古い質問であり、私が持っている答えは正しいことを私は知っています。ただし、これに遭遇した他の人は、いくつかのことを知っている必要があると思います。
つまり、参加状況でリンクサーバーに対してクエリを実行する場合、 リンクサーバーのテーブルは可能性が高い 結合操作を実行するために、クエリが実行されているサーバーにダウンロードされます。 OPの場合、両方のtable1
DB1
から およびtable1
DB2
から おそらくDB3
という名前のクエリを実行するサーバーに全体が転送されます 。
大きなテーブルがある場合、これは可能性があります 実行に時間がかかる操作になります。結局のところ、メモリやディスク転送速度よりも桁違いに遅いネットワークトラフィック速度によって制約されています。
可能であれば、ローカルテーブルに参加せずに、リモートサーバーに対して単一のクエリを実行して、必要なデータを一時テーブルにプルします。次に、それをクエリします。
それが不可能な場合は、SQLサーバーがテーブル全体をローカルにロードしなければならない原因となるさまざまなことを調べる必要があります。たとえば、GETDATE()
を使用します または特定の結合ですら。他のパフォーマンスキラーには、適切な権利を与えないことが含まれます。
詳細については、http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/を参照してください。