スケジュールされたジョブで定期的に次の SQL ( SQL Server 2008 ) を実行する必要があります。クエリ プランは、データが Oracle サーバーからプルされた後、53% のコストがソートされることを示しています。ただし、openquery でデータを注文しました。マージ結合時にクエリを強制的にソートしないようにする方法は?
merge target as t
using (select * from openquery(oracle, '
select * from t1 where UpdateTime > ''....'' order by k1, k2')
) as s on s.k1=t.k1 and s.k2=t.K2 -- the clustered PK of "target" is K1,k2
when matched then ......
when not matched then ......
bulk insert
の「 」のようなものはありwith (order( { column [ ASC | DESC ] } [ ,...n ] ))
ますか?merge
存在する場合、ステートメントのクエリプランを改善するのに役立ちますか?
Oracle テーブルの K1、K2 にすでに PK がある場合、oracle.db.owner.tablename
ターゲットとして使用するだけでよいでしょうか? (SQL Server は Oracle のメタ情報からインデックスを割り出しますか?)
または、Oracle データをローカルの一時テーブルに格納し、K1、k2 にクラスター化された主キーを作成するのが最善でしょうか? 返される openquery データ セットが大きくなる場合があるため、一時テーブルを作成しないようにしています。