У меня есть таблица, созданная следующим образом:
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 являются идентификаторами и задаются в качестве первичного ключа.Пятая строка, Picture, - это полезная нагрузка.Это изображение с серым значением 800x800 пикселей 8 бит (размер = 625 кБайт).
Если я хочу загрузить изображение, я использую следующую команду:
SELECT Picture FROM rhunkn1_omf.picture WHERE MeasNr = 2 AND
ExperimentNr = 3 AND SequenceNr = 150;
В рабочей среде MySQL япосмотрите продолжительность и время выборки, если я запустил эту команду!Для небольших таблиц (800 МБ, 2376 записей, картинка 640x480) это очень быстро (<100 мс).Если я возьму таблицу большего размера (5800 МБайт, 9024 записи), она станет очень медленной (> 9 с).
Например, я запускаю следующую команду (для большой таблицы):
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, который был еще медленнее.