2011-12-22 14 views
0

私は2つのSQL Serverインスタンスを持っており、あるサーバー上のデータベースを別のサーバーからリモートでたくさん照会しています。 server1.database1上でこのようなクエリ:SQL Serverリモートクエリをよりうまくやっていますか?

select T1.id 
from server1.database1.dbo.table1 T1 
inner join server2.datbase2.dbo.table2 T2 
on T1.id = T2.id 

私は他の誰かからこのコードを継承しましたし、これを行うためのより良い(速い)方法があるかどう思っていましたか?つまり、server1.database1.dboのserver2.databse2.dbo.table2の正確なレプリカコピーを作成して、それ自体を更新し、リアルタイムで最新の状態に保つ方法がありますか?

のMicrosoft SQL Serverの標準版(64ビット) バージョン10.0.4000.0

編集:私は、私が開いているクエリを使用して(NOLOCK)とすることができた場合に実際に、私は、このシナリオでは、今やることは、あるに私が必要とする最小のデータセットを取得し、それを一時テーブルに入れます。そして、私は、 "ID"列を独自のクラスタード・インデックスに設定しました。サーバー1に参加しているものにすばやく参加できます。

+0

これらのデータベースは互いに非常に離れています。または、クエリの対象が両方のデータベースまたはその両方から離れていますか? – JeffO

答えて

2

、あなたは(あなたのバージョンとエディションによっては)自分のシナリオのための3つの主要なオプションがあります。

Log Shipping:簡単なセットアップおよび維持します。ただし、「レプリカ」データベースはリアルタイムではなく、元のサーバーからの最後のトランザクションログバックアップと同じだけ最新の状態になります。

Mirroring:非常にリアルタイムに近いですが、「レプリカ」データベースは直接読み取ることができません。代わりに、スナップショットを定期的に作成する必要があります。

Replication:管理と保守が難しいですが、レプリカデータベースで最もリアルタイムなバージョンのデータが得られる可能性があります。

リンクサーバーでパフォーマンスや安定性の問題が発生している場合を除き、これらの3つの方法のいずれかを実装するために多くの時間と労力を費やしていない限り、このアプローチに固執します。

0

テーブルのビューを作成することはできません。常に他のデータベースを参照する必要はなく、正確なテーブルを取得します。しかし、あなたはまだ他のテーブルが必要になります。

SQL Serverで
関連する問題