Мой чисто практический опыт применения InnoDB на производственных мощностях показал, что данный драйвер гавно, массивные инсерты и апдейты кладут его в смерть. Симптомы: непонятные зависания тредов мускуля, потери данных. SQL вроде проходит, ошибки не возвращает, а данные не записались.
Производственные мощности – это база в десятки гигабайт, >1k QPs и все такое.
Конечно в InnoDB есть такие вещи как FK Constraints, вроде даж триггеры есть, и даже локи на уровне строки, но …. увы. По шустроте с MyISAM он просто несравним.
Это все вопреки «форумным» мнениям начинающих программистов-теоретиков, что InnoDB рулит. Рулит. На десятке инсертов в сутки.
Еще одно заблуждение – InnoDB надежнее MyISAM, MyISAM крашится, InnoDB нет, у него мол есть восстановление из лог файла. Ну начнем с того что InnoDB вообще по непонятным причинам теряет данные при более-менее серъезной мощности. MyISAM крашится да. При криворуких составлениях схемы БД, при криворукой работе с ней и при внезапном выключении питания.
Ничего из этого лично меня не беспокоит и я наслаждаюсь производительностью MyISAM. Чего и вам советую.
Если будет время, выложу какой нить бенчмарк.
Посты
А может вы его не так готовите в условиях своей нагрузки?
Это не просто «форумное» мнение, но и мнение многих специалистов, в том числе и авторов http://www.mysqlperformanceblog.com/
Я не самый большой специалист, у меня просто есть конкретная практика использования: MyISAM летает, INNODB тормозит и теряет данные.
Повторяю, практика использования на ПРОИЗВОДСТВЕННЫХ нагрузках, а не на разработке хоум паги.
Кроме того, указав «skip-innodb» в my.cnf можно освободить метров 150 оперативной памяти, запрошенной мускулем при старте
А можно поподробнее написать о сути «производственной нагрузки»? Это реальная задача или синтетический тест? Как именно вставлялись и апдейтились данные.
Тесты ведь можно по разному организовать. Я вам могу с 2-х конектов и 2-мя апдейтами организовать дедлок, накрутить сверху «массированную вставку» и тут любая база ляжет как миленьках, хоть MySQL, хоть Oracle.
Кроме этого, вы сравниваете MyISAM с InnoDB при этом не пишете как себя ведет MyISAM при таких же «массированных вставках и апдейтах»
Понятно что MyISAM легок и на выборки быстр, для этого он и спроектирован. А вы попробуйте применить его в проектах, где юзеры пишут в базу много? Все встанет сразу.
Пишут. Много. Очень много. Применял InnoDB. Лажа полная.
Чушь. Вы хоть раз слышали, что у InnoDB (как, впрочем, и у MyISAM) есть множество настроек? И, само собой разумеется, что дефолтные не всегда лучшие. Я использую InnoDB уже 5 лет и только радуюсь: как скорости, так и надёжности.
Конечно, insert в InnoDB несколько медленнее, ибо есть оверхед на транзакцию, но это цена надёжности. Вам стоит слегка подумать, как реорганизовать все эти инсерты, а не решать задачу «в лоб», просто сделав alter table `foo` engine=innodb: именно такой подход свойственен «начинающим программистам-теоретикам». Теорию, кстати, тоже ещё никто не отменял: RTFM, как устроен InnoDB, и вы поймёте, как с ней работать.
С другой стороны, от добра добра не ищут: если вас устраивает MyISAM, то пусть так и будет, зачем что-то менять. Но голословных заявлений в сторону InnoDB делать всё же не стоит.