2016-03-28 7 views
-2

C#を使用しているプログラムのパフォーマンスに問題があります。mySQL - 時間のかかるデータの挿入

最初のループでは、175000レコードが挿入され、54秒で更新されます。 2番目のループでは、175,000レコード、1分11秒です。 次に、18195 1分28秒で3番目のループ。 ループが進行していて、取った時間が125分のレコードの方が2分以上かかることがあります。

私は小規模なレコードが更新に時間がかかるのはなぜでしょうか?更新されたレコードの数は、ループを完了するのにかかる時間に影響しませんか?

誰でも私にこれを教えてもらえますか?プログラムの

フロー:

、テーブルAにrawdatatbl ID> = startID & & ID < = MAXIDから時刻(日付、時刻)を選択した日付を挿入します。 // startIDは、私はInnoDBテーブルを使用しています.....

、COLUMNNAME =値、columnName1 =値、columnName2 =値設定された次の最後のレコードのID

更新TableAのあるCOLUMNNAME。

+1

お願いしているコードを表示してください。 –

+0

は、3つのループすべてで挿入と更新を実行していますか? –

+0

@ un-luckyはい、このテーブルAでは、各ループは、日付と時刻を他のテーブルから選択して日付と時刻を挿入し、生データテーブルを呼び出し、プログラムはテーブルAの値を更新します。 – njz

答えて

2

報告された動作は、テーブルのサイズが大きくなり、UPDATEステートメントのクエリの実行計画が非効率的であるようです。ほとんどの場合、UPDATEは、適切な索引が使用できないため、更新する行を見つけるために全表スキャンを実行している可能性があります。また、表の行数が増えるにつれて、全表スキャンを実行するのにかかる時間も長くなります。

クイック勧告:

見直し、適切なインデックスを確認

を(EXPLAIN実行することによって得た)クエリ実行プランは、MySQLインスタンス自体のチューニングがあります、利用可能であり、それとは別に

を使用されています。しかし、これはテーブルが使用しているストレージエンジン、MyISAM、InnoDBなどに依存します。

+0

InnoDB – njz

0

SHOW CREATE TABLEを両方のテーブルと実際のステートメントに入力してください。ここにいくつかの推測があります...

  • ターゲットテーブルにはインデックスがあります。挿入が発生するとインデックスが作成されるため、「ランダム」インデックスは遅くなり、遅くなります。
  • innodb_buffer_pool_sizeが小さく、キャッシングが問題になりました。
  • UPDATEは完全なテーブル更新のようです。テーブルは毎回大きくなっています。
  • startIDを次のクエリ(id>=startID)を実行する前にどのように取得しましたか?おそらく、あなたがテーブルの中に入るほど、コードは遅くなるでしょう。
  • 「2番目のループ」では、「ループ」はどこですか?または、INSERT...SELECTを「ループ」と呼んでいましたか?
関連する問題