【发布时间】:2012-03-29 08:50:57
【问题描述】:
我有一个这样创建的表:
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、Time 和 SequenceNr 是标识符,被设置为主键。第五行,图片,是有效载荷。它是一张 800x800 像素 8Bit 灰度值图片(大小 = 625 kBytes)。
如果我要加载图片,我使用以下命令:
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2 AND
ExperimentNr = 3 AND SequenceNr = 150;
在 MySQL 工作台中,如果我运行此命令,我会看到持续时间和获取时间!对于较小的表(800 MB,2376 个条目,图片 640x480),它非常快(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,它甚至更慢。
【问题讨论】:
标签: mysql performance