MyISAM против InnoDB для производительности BI / пакетных запросов (т. Е. _NOT_ OLTP) - PullRequest
6 голосов
/ 08 мая 2011

Конечно, для транзакционной базы данных InnoDB - это плохой данк.MyISAM не поддерживает транзакции или блокировку на уровне строк.

Но что, если я хочу выполнять большие неприятные пакетные запросы, которые затрагивают сотни миллионов строк?

Есть ли области, в которых MyISAM имеет относительные значения?преимущество перед InnoDB ??

например, один (младший), который я знаю ... "select count (*) from my_table;"MyISAM знает ответ на этот вопрос немедленно, в то время как InnoDB может занять минуту или больше, чтобы принять решение.

--- Dave

Ответы [ 3 ]

5 голосов
/ 08 мая 2011

MyISAM лучше масштабируется с очень большими наборами данных.InnoDB превосходит MyISAM во многих ситуациях до тех пор, пока он не может сохранить индексы в памяти, а затем резко падает производительность.

MyISAM также поддерживает таблицы MERGE, что является своего рода осколком для «бедняка».Вы можете добавлять / удалять очень большие наборы данных мгновенно.Например, если у вас есть 1 таблица на рабочий квартал, вы можете создать таблицу слияния за последние 4 квартала, или за определенный год, или любой другой диапазон.Вместо того, чтобы экспортировать, удалять и импортировать, чтобы перемещать данные, вы можете просто повторно объявить содержимое базовой таблицы MERGE.Изменение кода не требуется, так как имя таблицы не меняется.

MyISAM также лучше подходит для регистрации, когда вы только добавляете в таблицу.Как и таблицы MERGE, вы можете легко поменять (повернуть «журналы») таблицу и / или скопировать ее.

Вы можете скопировать файлы БД, связанные с таблицей MyISAM, на другой компьютер и просто поместить их в MySQL.Каталог данных и MySQL автоматически добавят их в доступные таблицы.Вы не можете сделать это с InnoDB, вам нужно экспортировать / импортировать.

Это все конкретные случаи, но я использовал каждый из них несколько раз.

Конечно, с репликацией, вы можете использовать оба.Таблица может быть InnoDB на ведущем устройстве и MyISAM на ведомом устройстве.Структура должна быть такой же, а не тип таблицы.Тогда вы можете получить лучшее из обоих.Тип таблицы BLACKHOLE работает следующим образом.

1 голос
/ 08 мая 2011

Вот отличная статья, сравнивающая различные показатели производительности http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ - вам придется оценивать это с нескольких сторон, включая то, как вы собираетесь писать свои запросы и как выглядит ваша схема. Это просто не черно-белый вопрос.

0 голосов
/ 13 августа 2013

Согласно этой статье , начиная с v5.6, InnoDB была разработана до такой степени, что она лучше во всех сценариях. Автор, вероятно, немного предвзят, но в нем четко указано, какие технологии рассматриваются в качестве будущего направления платформы.

...