У меня есть таблица mysql с более чем 30 миллионами записей, которые изначально хранились с помощью myisam. Вот описание таблицы:
Я бы выполнил следующий запрос к этой таблице, который обычно занимает около 30 секунд.Я бы каждый раз менял @eid, чтобы избежать кэширования базы данных или диска.
select count(fact_data.id)
from fact_data
where fact_data.entity_id=@eid
and fact_data.metric_id=1
Затем я преобразовал эту таблицу в innoDB без внесения каких-либо других изменений, и после этого один и тот же запрос теперь возвращается менее чем за секунду каждый раз, когда я запускаю запрос. Даже когда я случайным образом устанавливаю @eid, чтобы избежать кэширования, запрос возвращается менее чем за секунду.
Я изучал различия между двумя типами хранилищ, пытаясь объяснить резкое улучшение производительности, но ничего не нашел. На самом деле многое из того, что я читал, указывает на то, что Myisam должен работать быстрее.
Запросы, которые я выполняю, относятся к локальной базе данных, и никакие другие процессы не обращаются к базе данных во время тестов.