web-dev-qa-db-ja.com

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

最速の方法で、一連のレコード(500,0)を一度にデータベースに挿入する必要があります。 1,7レコードを一度に挿入しようとしましたが、20分かかりました!!使ってます SQL-SERVERC#

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

The Fields

8
Ori Ben Ezra

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

[〜#〜] 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の順序であると、挿入ははるかに速くなります。

12
Kenneth Fisher

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

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

0
Solomon Rutzky

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

0
Josh Simar