2017-02-01 15 views
-1

数百万を持った後、本当に遅いました。挿入は、私は基本的にはこのようになりますテーブル構造を持つレコード

これらのテーブルのうちの2つには、何百万と何百万もの記録が含まれています(UserTransactionsを確認した最後の時間は約1,400万レコードでした)。

これらのテーブルのいずれかに挿入を実行しようとすると、私は巨大なパフォーマンス問題と減速に直面しています。

挿入のための私のコードは次のようになります。

using (var ctx = new mydbEntities()) 
{ 
    ctx.Configuration.AutoDetectChangesEnabled = false; 
    ctx.Configuration.ValidateOnSaveEnabled = false; 
    _listOfUserTransactions; // List<UserTransactions> 
    ctx.BulkInsert(_listOfUserTransactions); 
    ctx.SaveChanges(); 
} 

はのは_listOfUserTransactions自体が100kのエンティティをcontiansと仮定しましょう。テーブルのレコード量が少なくなる前に、インサートはすごく高速に実行されていました...今は非常に遅くなり、BulkInsertで100kレコードを挿入するのに数時間かかることがあります...

私はもう何もしませんインサートのパフォーマンスを向上させる...

あなたは私を助けることができますか?

+0

私の最初の推測は、あなたがこれらのテーブル上のどのインデックスをチェックし、できるだけこれを減らすかということです。第2に、表の主キーがクラスター化されていて、それ以外のものがある場合は、クラスター化されていないものにすると、挿入時に表の再編成が必要になります。 – MikeS

+0

@MikeあなたはUserItemsのUserId FKにノンクラスタードインデックスを追加することを意味しますか? – User987

+0

@MikeSあなたの答えをもう少し詳しく説明できますか、私はあなたが何を意味するのか正確には分かりませんか?私がそれを受け入れることができるように答えとして私にこれを返せたら:) – User987

答えて

0

私のコメントで述べたように:

私の最初の推測では、あなたがこれらのテーブルの上に持っており、可能な限り、この限り減らすインデックスかどうか確認することです。第2に、表の主キーがクラスター化されていて、それ以外のものがある場合は、クラスター化されていないものにすると、挿入時に表の再編成が必要になります。

ユーザートランザクションテーブルの質問にスキーマ(インデックスを含む)を追加できれば、何が起こっているのかを把握するのに役立ちます。クラスタ化されたインデックスは、ディスク上のテーブルデータを物理的に再編成する必要があるため、テーブルのクラスタードインデックスを選択するには、選択したフィールドがこの再編成を最小限に抑えるような順序になるように注意する必要があります。

関連する問題