4

2つのリンクされたサーバー間にインポートがあります。私は基本的に、複数の結合からデータを自分の側のテーブルに取得する必要がありました。

現在のクエリは次のようなものです。

 select a.*
 from db1.dbo.tbl1 a
      inner join db1.dbo.tbl2 on ...
      inner join db1.dbo.tbl3 on ...
      inner join db1.dbo.tbl4 on ...
      inner join db2.dbo.myside on ...

db1=リンクサーバー

db2=自分のデータベース

この後、db2にあるテーブルにこのデータを追加するために+selectへの挿入を使用しています。(通常、数百レコード-このインポートは1分に1回実行されます)

私の質問はパフォーマンスに関連しています。リンクサーバー上のテーブル(tbl1、tbl2、tbl3、tbl4)は巨大なテーブルであり、数百万のレコードがあり、インポートプロセスの速度が低下しています。たとえばストアドプロシージャで「反対側」(db1-リンクサーバー)で結合を行うと、クエリが同じように見えても、実行速度が速くなると言われました。そうですか?これをテストするのはちょっと難しいです。結合には私のデータベースのテーブルも含まれていることに注意してください。

また。これをより速く実行するために使用できる他の「トリック」はありますか?ありがとう

4

3 に答える 3

2

それは本当にあなたのクエリが実際に何をしているかに依存します。結合の「リモート」ヒントを使用して、リンクサーバーで結合を強制的に実行できます。すなわち:

select a.*  
 from db1.dbo.tbl1 a   
      inner remote join db1.dbo.tbl2 on ...  
      inner remote join db1.dbo.tbl3 on ...  
      inner remote join db1.dbo.tbl4 on ...  
      inner join db2.dbo.myside on ... 

(サーバーを上記から除外し、すべての「db1。」参照は実際には「linkedserver.db1」であると想定しています。)

リンクサーバー上の情報だけでほとんどの作業を実行できる場合は、OPENQUERYを使用して処理を高速化できます。すなわち:

select a.*  
 from OPENQUERY(db1, 'SELECT a.* from db1.dbo.tbl1 a   
      inner join db1.dbo.tbl2 on ...  
      inner join db1.dbo.tbl3 on ...  
      inner join db1.dbo.tbl4 on ... ') a  
      inner join db2.dbo.myside on ... 

しかし、それをスピードアップする最良の方法は、何を返すかを制御するためにリンクサーバー上に制御テーブルを持つことかもしれませんが、これも実際のクエリ、それが何をしているのか、そしてリンクサーバーに対してどのような権限を持っているかによって異なります。

于 2010-05-28T03:35:27.417 に答える
1

パフォーマンスを向上させるために、ストアドプロシージャをdb1に配置するのは正しいことです。これにより、結合で多くのデータがフィルタリングされるため、パイプを通過する必要のあるデータが少なくなります。

反対側のデータが静的である場合は、マテリアライズドビューに配置してみませんか?このように、クエリが実行されるたびにではなく、1日に1回だけデータを更新する必要があります。

于 2010-05-26T09:36:13.130 に答える
1

ストアード・プロシージャーはキャッシュされるため、ストアード・プロシージャーを初めて実行するときは時間がかかります。そのストアドプロシージャへの以降のすべての呼び出しは、はるかに高速に実行されます。SSMSに実行統計を含めることで、パフォーマンスへの影響を確認できます。

結合のパフォーマンスを向上させるには、インデックスが設定されていることを確認してください。

ネットワークに依存しているため、サーバー間の挿入は危険であることに注意してください。また、このシナリオでトランザクションを使用できるかどうかもわかりません。そうでなければ、それは別の問題です。

一時データベースがそのような挿入に対処できず、修正がカーソルを使用するというシナリオを見てきました。これははるかに低速でしたが、そのシナリオではより信頼性があります。

于 2010-05-26T09:36:45.877 に答える