0

我有一个带有不同表的 MySQL (MyISAM) 数据库。让我们以具有下表的数据库“rh955_omf”为例:

  • 信号(600 MB,17925 个条目)
  • 图片(5'355 MB,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:54s(如前所述)
  • rh955_copy_omf:3.1s
  • rh955_p_copy_omf:12.9s
  • rh955_v_p_copy_omf:10.7s

所以看起来加载数据的时间取决于数据库中的其他表。这甚至可能吗(因为我只是在“信号”表中搜索)?更令人困惑的是:在“rh955_v_p_copy_omf”表中,我拥有原始表中的所有数据,但性能要好约 5 倍。对这种行为有什么解释吗?我会感谢任何帮助,因为我真的被困在这一点上,需要提高数据库性能......

附加信息:在一种情况下,我使用命令“LOAD DATA INFILE 'D:/Exported MySQL/rh955/signal.omf' INTO table rh955_omf.signal”将数据存储在表中(这是加载数据缓慢的情况) ,在其他情况下,我逐行存储数据。也许这就是为什么性能不同的原因?如果是,从文件存储数据的解决方法是什么?

4

1 回答 1

0

它们的索引是否相同?

每个数据库的服务器参数是否相同(相同的内存、启动配置和参数等)?

它们在同一个磁盘上吗?

如果它们在同一个磁盘上,是否有其他应用程序同时运行会影响读写头的位置?

您是每次都停止其他数据库还是有一些仍在运行?

于 2012-09-19T09:02:38.260 回答