2011-12-20 11 views
0

SQL Server 2005テーブルに約200万レコードを挿入します。テーブルは現在、クラスター化インデックスと非クラスター化インデックスを持っています。私はそのテーブルの挿入クエリのパフォーマンスを向上させたい。誰でも考えがありますか大量のデータをSQL Server 2005テーブルに挿入

+1

また、現在どのようにデータを挿入していますか?バルクインサートを使用していますか? INSERT文を使用していますか?一度に1つの行を挿入したり、一度に複数の行を挿入していますか? –

+1

@TobyAllen:これは宿題であることを確かに知っていますか? –

+0

私はSQL Server 2005データベースシステムを使用しています。そして、私は一括挿入を使用していません。私はtable_nameステートメントに挿入を使用していて、現在複数の行を同時に挿入しています。 –

答えて

1

テーブルのインデックスを無効にしてから、再度挿入してから有効にすることができます。大量のデータを表に挿入する場合は、時間を大幅に節約できます。

そのようなことを行う方法についてSQLサーバーについては、この記事をチェックアウト:http://msdn.microsoft.com/en-us/library/ms177406.aspx

2
  1. ドロップ(挿入のためのあなたのデータは同じキーで 先行予約されていない場合は、プライマリを含む)すべてのインデックス
  2. データ
  3. を挿入あなたは一括挿入を使用していない正当な理由がない場合、私はあなたの最高のOと言うだろう
+4

SQL Serverについて話しているなら、クラスタリングインデックスを削除しないことをお勧めします。それ以外の場合は、挿入前にテーブルがヒープに変換され、挿入後にクラスタ化されたテーブルに戻されます。どちらも非常に時間とリソースを消費する操作です... –

+0

はい、同意しますが、すでにテーブルに大量のデータがある場合のみ –

+0

インデックスを削除または無効にしてから、インデックスを再作成または再構築すると、より多くの時間が消費されます。そのテーブルにはすでにレコードが含まれているので、私はこのことを試しましたが、それは私の利益にはなりません –

1

すべてドロップされたインデックスを再作成しますptionはこれを行うことです。つまり、書式に合わせて行を選択し、一括再挿入できます。

この量の通常の挿入を行うと、トランザクションログに大きな負担がかかります。

バルク挿入がオプションでない場合は、挿入をチャンクに分割することで少し勝てます - 行ごとに行かずに挿入して更新しようとしないでください一人でいっぱいになってしまった。

私はこれを少し実験しましたが、決定的な答えに近づく時間はありませんでした。 (私は同じ理由でPerformance for RBAR vs. set-based processing with varying transactional sizesという質問を始めました)

-2

1つのインサートに最大1000行を挿入できます。

values (a,b,c), (d,f,h) 

挿入時に主キーを使用してデータをソートします。あなたは、インデックスをドロップして、データを挿入して、インデックスを再作成する必要があります(ロックを保持)

関連する問題