Отличия между системами хранения данных MyISAM и InnoDB.
В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах:
| Описание | MyISAM | InnoDB |
| Транзакционный движек | Нет | Да |
| Поддержка внешних ключей | Нет | Да |
| Блокировка. | Блокировка на уровне таблиц | Блокировка на уровне строк |
| Одновременные запросы к разным частям таблицы. | Медленнее | Быстрее |
| При смешанной нагрузке в таблице (select/update/delete/insert) | Медленнее | Быстрее |
| Операция Insert | Быстрее | Медленнее, так как есть оверхед на транзакцию, но это цена надежности |
| Если преобладают операции чтения (SELECT) | Работает быстрее | Работает медленнее |
| Deadlock | Не возникают | Возможны. |
| Поддержка полнотекстового поиска | Да | Нет (доступен начиная с версии MySQL 5.6.4) |
| Запрос Count(*) | Быстрее | Медленнее |
| Поддержка mysqlhotcopy | Да | Нет |
| Файловое хранение таблиц | Каждой таблице отдельный файл | Данные при настройках по умолчанию хранятся в больших совместно используемых файлах |
| Да | Нет | |
| Размер таблиц в БД | Меньше | Больше |
| Поведение в случае сбоя | Крашится вся таблица | По логам можно все восстановить |
| В случае хранения «логов» и подобного | Лучше | Хуже |
Выводы:
- Использовать MyISAM лучше в таблицах, которых преобладает один вид доступа: чтение (новостной сайт) или запись (например, логирование) ;
- Использование InnoDB имеет смысл во всех остальных случаях и случаях повышенных требований по сохранности данных.