mysql テーブルにデータを挿入するときにパフォーマンスの問題が発生しています。テーブルには多数の列があります。DATE、A、B、C、D、E、F としましょう。ここで、DATE、A、B、C、D、E は主キーです。毎日、そのテーブルに (異なる日付で) 70,000 行を挿入すると、このテーブルには現在 1,800 万行が含まれています。行を挿入するために使用する方法は、70k の INSERT クエリを送信するだけです。
私が抱えている問題は、クエリに以前よりも多くの時間がかかり始めたことです。数分から数時間かかります。インサートのプロファイリングを行った結果、得られたチャートは次のとおりです。
各挿入の速度 (秒) とその日の挿入数:
いくつかの奇妙な事実:
- ほとんどのクエリは実行に 2 ミリ秒未満かかります
- 遅いクエリの速度は、その日付のテーブル内の行数に比例して増加します
- この動作は、データベースで一連のプロセスが発生した後、夜間にのみ発生します。日中の挿入は高速で、週末も高速です
- 全体的な速度は、データベースで他に何が実行されているかに依存しません。実際、これが発生した場合、データベースで他に何も実行されていません。
- クエリが高速かどうかを説明できるクエリは何もありません。高速なものは低速のものと非常に似ており、ある日から別の日に同じセットではありません。
- 振る舞いは、ある日から次の日に変わることはありません。
何が原因でしょうか?
** 編集 ** インデックス内の列は次の順序になっています。
DATE NOT NULL,
DATE NOT NULL,
VARCHAR (10) NOT NULL,
VARCHAR (45) NOT NULL,
VARCHAR (45) NOT NULL,
VARCHAR (3) NOT NULL,
VARCHAR (45) NOT NULL,
DOUBLE NOT NULL,
VARCHAR (10) NOT NULL,
VARCHAR (45) NOT NULL,
VARCHAR (45) NOT NULL,
VARCHAR (45) NOT NULL,
日付は今日と同じか空のままで、double は常に同じ数値です (誰がこのテーブルを設計したかはわかりません)。