0

したがって、この1回限りの取引では、さまざまなデータベース/テーブルからデータを取得し、それをスライスしてダイシングし、1つのテーブルに挿入する必要があります。

これは、WindowsフォームC#.NET4.0アプリケーションを介して行われます。

CRM環境で使用するさまざまなエンティティごとに、この1回限りの取引プロセスを(明らかに)1回実行する必要があります。

一部のエンティティでは、挿入する行が20,000行しかないため、ネットワーク化されたSQL接続で問題ありません。

しかし、これは80万本の長さで、完成までにかなりの時間がかかります。

SQL Server自体にアプリケーションをインストールし、ネットワーク接続ではなく接続文字列でローカル接続を指定することで、速度が上がるかどうか疑問に思いました。

そのサーバーへのリモートデスクトップアクセスを取得するには、正式なリクエストを行う必要があります。そのため、実際にテストする前に、他の誰かがこのアプローチを正常に使用したことがあるかどうかを尋ねています。

SaveChanges()また、挿入された各行で呼び出すEntityFramework4を介して挿入を行っています。おそらく、そこにも最適化の余地があり、私はあなたの意見を喜んで読みます。

どうもありがとう!

4

2 に答える 2

4

ネットワークを削除できるときはいつでも、パフォーマンスの向上が見られます。80 万行の場合は、SqlBulkCopy クラスを使用します。使い方は非常に簡単で、基本的には BULK INSERT と同等の機能をカバーの下で行います。

于 2012-11-28T15:42:37.540 に答える
1

すべてのデータベース/テーブルが同じサーバー上にない限り、得られるものは多くありません。はい、同じ物理ボックスで挿入を実行した場合、挿入速度は向上しますが、読み取りにはまだネットワークがあります。

一度に 1 行ずつ挿入するのは、ローカルまたはリモートで最も遅い挿入です。

挿入を最適化するには、SqlBulkCopy (+1 Philip)、TVP、または Drapper を調べます。

スライスアンドダイス?これはどれほど複雑ですか?.NET は必要ですか? これは TSQL で実行できますか?

于 2012-11-28T15:56:40.387 に答える