InnoDB vs MyISAM

InnoDB vs MyISAMПосле очередного топика на Хабре в стиле "Но ведь все сколько-нибудь компетентные вебдевелоперы знают, что надо использовать движок InnoDB" решил написать обзор.
Впервые с проблемами блокировки я столкнулся сравнительно давно, еще лет 8 назад. Примитивный счетчик загрузок, в котором через UPDATE обновлялось поле cnt , отлично работал. Когда на проекте увеличилась посещаемость,  mysql начал дико тормозить. Просмотр процессов показал, что висит множество SELECT запросов к этой таблице. Так я узнал, что UPDATE на время исполнения лочит всю MyISAM таблицу и самое быстрое решение проблемы, сковертировать таблицу в InnoDB. Но поскольку мне нужен был полнотекстовый поиск, пришлось пойти другим путем. Вынести частые обновления в промежуточную таблицу типа MEMORY. А основную обновлять изредка по cron-у.

Разбираемся с чем есть MyISAM.

Не поддерживает транзакции и с этим связаны его основные недостатки и преимущества

  1. В большинстве случаев он быстрее, так как нет расходов на транзакции
  2. Занимает меньше дискового пространства
  3. Меньше расход памяти на обновления
  4. Полнотекстовый индекс
  5. Быстрый INSERT, SELECT

 

InnoDB
 

  1. Поддержка транзакций
  2. Построчная блокировка. UPDATE не блокирует всю таблицу.
  3. Отлично ведет себя при смешанной нагрузке (insert|select|update|delete)

Подведем итог, ответив на вопрос в заголовке, MyISAM или InnoDB?

Если прочитав все выше, вы так и не решили, что выбрать, то лучше первое. В остальном, универсального решения нет, все зависит от задачи.
Если у вас приложение типа OLAP то выбирайте MyISAM, если OLTP, то — InnoDB.

You may also like...