Есть несколько Q & A для «Почему InnoDB (намного) медленнее, чем MyISAM», но я не мог найти ни одной темы для обратного.Почему myisam медленнее, чем Innodb
Итак, у меня была таблица, определяемая как InnoDB, где я хранил содержимое файла в поле blob. Поскольку обычно для этого MyISAM следует использовать, я переключил эту таблицу. Вот его структура:
CREATE TABLE `liv_fx_files_files` (
`fid` int(11) NOT NULL AUTO_INCREMENT,
`filedata` longblob NOT NULL,
`filetype` varchar(255) NOT NULL,
`filename` varchar(255) NOT NULL,
`filesize` int(11) NOT NULL,
`context` varchar(1) NOT NULL DEFAULT '',
`saveuser` varchar(32) NOT NULL,
`savetime` int(11) NOT NULL,
`_state` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`fid`),
KEY `_state` (`_state`)
) ENGINE=MyISAM AUTO_INCREMENT=4550 DEFAULT CHARSET=utf8;
Есть 4549 записи, хранящиеся в нем до сих пор (с filedata
происходит от 0 до 48м Сумма всех файлов составляет около 6G
Поэтому, когда мне нужно знать текущий итог.. Filesize я выполняю запрос
SELECT SUM(filesize) FROM liv_fx_files_files;
проблема заключается в том, что, так как я перешел с InnoDB в MyISAM этот простой запрос длится очень долго (около 30 секунд и больше), тогда как на InnoDB это было сделано в рамках одной секунды.
Но агрегации - это не единственные запросы, которые очень медленны; это почти каждый запрос.
Я думаю, я мог бы исправить это, приняв конфигурацию (которая в настоящее время оптимизирована для использования только InnoDB), но не знает, какие настройки нужно настроить. Кто-нибудь подскажет мне, пожалуйста?
current mysql server config (SHOW VARIABLES
as csv)
Пример для другого запроса обожженной на обоих типов таблиц (оба содержат точные же данные, и имеют такое же определение). Все остальные проверенные запросы ведут себя одинаково, скажем, намного быстрее работают с таблицей MyISAM в виде InnoDB!
SELECT sql_no_cache `fxfilefile`.`filename` AS `filename` FROM `myisamtable`|`innodbtable` AS `fxfilefile` WHERE `fxfilefile`.`filename` LIKE '%foo%';
Опубликовать текущий файл конфигурации, возможно, вы используете очень небольшую конфигурацию. Также рассмотрите добавление индекса в поле filesize. – Ghigo
@Ghigo спасибо, добавив, что индекс решает проблему скорости с агрегацией этого столбца, но не улучшает скорость для других запросов. Файл конфигурации добавлен – toshniba
Это не очень помогает: для таблиц MyISAM кэширование обрабатывается базовой ОС. Пространство, доступное для этого, не видно изнутри MySQL. – symcbean