MyISAM vs InnoDB для BI / пакетного выполнения запросов (то есть, не OLTP)


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

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

Существуют ли области, где MyISAM имеет относительное преимущество перед InnoDB??

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

- - - Дейв

3 6

3 ответа:

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

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

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

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

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

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

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

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