大量のレコードを短時間でデータベースに挿入する方法は?


8

最速の方法で、大量のレコード(500,000)を一度にデータベースに挿入する必要があります。一度に1,700件のレコードを挿入してみましたが20分かかりました!! とを使用SQL-SERVERしていC#ます。

次の表は高速挿入の手法には貢献しませんが、挿入する必要のあるフィールドの数について理解を深めるために、とにかくリンクすることにします(約500Kで複製します)。

フィールド

回答:


12

いくつかのオプションがあります。頭に浮かぶ主なものは次のとおりです。

SSIS -SQL Server Integration Services:これはSQL Servers ETLツールであり、ほとんどすべてのソースからほとんどすべての宛先にデータを移動でき、非常に高速です。

BCP-一括コピープログラム:SQL Serverに付属するコマンドラインツールです。テキストファイルをSQL Serverに移動するのは非常に優れています。または、あるSQL Serverからネイティブ形式にエクスポートし、同じ形式を使用して別のSQL Serverにインポートすることもできます。BCPも非常に高速ですが、SSISよりも少し制限があります。

INSERT INTO tablename SELECT fieldlist FROM othertable:これは、同じサーバー上の1つのSQLテーブルから別のSQLテーブルに移動することを前提としています。これは最速ですが、50万行ではかなり大きなトランザクションを調べているか、または言ったように分割する必要があります。

OPENROWSET:これは、さまざまな形式からデータをテーブルにプルできるSQL Server関数です。それはかなり速いはずですが、私はそれをあまり使っていません。

一般的な注意:主キーはmbr_idです。これが(ID列ではなく)ソースデータに格納されているものである場合、ソースデータがmbr_idの順序になっていると、挿入が大幅に速くなります。


0

使っているので。NET、外部プロセス呼び出さずにデータを実際にストリーミングできます。テーブル値パラメーターを使用します。詳細とこのメソッドの別のバリエーションへのリンクについては、StackOverflowで私の回答を参照してください。

https://stackoverflow.com/a/25815939/577765


0

これをより高速にするために(特にこれがテーブルの初期設定である場合)、インデックスの削除についても参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.