異なるテーブルを持つ MySQL (MyISAM) データベースがあります。たとえば、次のテーブルを持つデータベース「rh955_omf」を見てみましょう。
- 信号 (600 MBytes、17925 エントリ)
- 画像 (5'355 MBytes、17925 エントリ)
- 速度 (680 MB、4979 エントリ)
実際には、シグナル テーブルのエントリに集中しているだけです。したがって、この表をもう少し詳しく説明したいと思います。以下のように作成されます。
CREATE TABLE rh955_omf.signal(MeasNr TINYINT UNSIGNED, ExperimentNr TINYINT UNSIGNED, Time INT, SequenceNr SMALLINT UNSIGNED, MeanBeatRate SMALLINT UNSIGNED, MedBeatRate SMALLINT UNSIGNED, MeanAmp1 MEDIUMINT UNSIGNED, MeanAmp2 MEDIUMINT UNSIGNED, StdDeviationAmp1 DOUBLE, StdDeviationAmp2 DOUBLE, MeanDeltaAmp MEDIUMINT UNSIGNED, Offset INT UNSIGNED, NrOfPeaks SMALLINT UNSIGNED, `Signal` MEDIUMBLOB, Peakcoord MEDIUMBLOB, Validity BOOL, Comment VARCHAR(255), PRIMARY KEY(MeasNr, ExperimentNr, SequenceNr));
次のコマンドを使用して、このテーブルから値を読み込みます。
SELECT MeanBeatRate FROM rh955_omf.signal WHERE MeasNr = 3 AND ExperimentNr = 10 AND SequenceNr BETWEEN 0 AND 407
「MeanBeatRate」行全体 (int 16 値) を初めてロードすると、約 54 秒かかります (MeasNr = 1..3、ExperimentNr = 1..24、SequenceNr >= min AND <= max)。再度ロードすると、0.5 秒かかります (キャッシュ)。
だから私がしたいのは、データベースを高速化することです。したがって、いくつかの新しいデータベースを作成しましたが、すべてのテーブルを異なるデータベースに配置しませんでした:
- rh955_copy_omf: シグナルテーブル
- rh955_p_copy_omf: シグナル テーブル、ピクチャ テーブル
- rh955_v_p_copy_omf: 信号テーブル、画像テーブル、速度テーブル
コンピューターを再起動し、さまざまなテーブルからすべての「MeanBeatRate」値を読み込みました。それは私に次の時間を与えました:
- rh955_omf: 54 秒 (前述のとおり)
- rh955_copy_omf: 3.1 秒
- rh955_p_copy_omf: 12.9 秒
- rh955_v_p_copy_omf: 10.7 秒
したがって、データをロードする時間は、データベース内の他のテーブルに依存しているようです。これは可能ですか(「シグナル」テーブルを検索しているだけなので)?さらにややこしいのは、テーブル "rh955_v_p_copy_omf" には、元のテーブルにもあるすべてのデータがありますが、パフォーマンスは ~5 倍優れています。その行動の説明はありますか?この時点で本当に行き詰まっており、データベースのパフォーマンスを向上させる必要があるため、助けていただければ幸いです...
追加情報:あるケースでは、コマンド「LOAD DATA INFILE 'D:/Exported MySQL/rh955/signal.omf' INTO table rh955_omf.signal」を使用してテーブルにデータを保存しました (データの読み込みが遅い場合)。 、それ以外の場合は、データを1行ずつ保存しました。性能が違うのはそのせいでしょうか。はいの場合、ファイルからデータを保存するための回避策は何ですか?