的我有这样创建的表:性能MySQL表
CREATE TABLE rh857_omf.picture(MeasNr TINYINT UNSIGNED, ExperimentNr TINYINT UNSIGNED,
Time INT, SequenceNr SMALLINT UNSIGNED, Picture MEDIUMBLOB, PRIMARY KEY(MeasNr,
ExperimentNr, Time, SequenceNr));
前四行MeasNR,ExperimentNr,时间和SequenceNr是标识符,被作为主键。第五行,图片是有效载荷。它是一个800x800 Pixel 8Bit灰度值图片(大小= 625 kBytes)。
如果我想加载的图片,我用下面的命令:
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2 AND
ExperimentNr = 3 AND SequenceNr = 150;
在MySQL的工作台,我看时间,如果我运行此命令提取时间!对于较小的表格(800 MBytes,2376个条目,图片640x480),其速度非常快(< 100ms)。如果我拿一张更大的表格(5800 MBytesm,9024个条目),它会变得很慢(> 9s)。
例如,我运行下面的命令(在大表):
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2 AND
ExperimentNr = 3 AND SequenceNr = 1025 LIMIT 0, 1000;
在第一时间花费5.2/3.9秒(持续时间/读取)。第二次使用相同的命令需要0.2/0.2秒。如果我改变SequenceNr
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2 AND
ExperimentNr = 3 AND SequenceNr = 977 LIMIT 0, 1000;
它的速度也非常快0.1 /0.3秒
但是,如果我改变了ExperimentNr,例如
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2
AND ExperimentNr = 4 AND SequenceNr = 1025 LIMIT 0, 1000;
需要很长的时间4.4/5.9秒。
有人知道为什么数据库的行为像这样,我怎么可以提高速度?如果我创建几个较小的图片表并将每个表的负载分开,是否有帮助?顺便说一句,我使用MySQL 5.1.62和MyISAM表,但我还测试了更慢的InnoDB。
的确如此,但如果是我,我会更进一步,将blob移动到带有自动增量PK的单独表格中,并更广泛地索引基表。 – symcbean 2012-03-29 09:21:43
这确实解决了我的问题。我只是删除了时间行中的主键,现在,加载数据所用的时间不到100毫秒 - >非常感谢!将blob放入单独的表格有什么好处? – 2012-03-29 09:33:47