InnoDB vs MyISAM: Choosing a MySQL Storage Engine

MyISAM was MySQL’s original default storage engine; InnoDB has been the default since MySQL 5.5, and for almost any modern use case, the choice isn’t really a choice anymore.

Why InnoDB Won

  • Transactions and ACID compliance — MyISAM has neither.
  • Row-level locking — MyISAM locks the entire table on writes, brutal under concurrent load.
  • Crash recovery — InnoDB’s write-ahead log makes it far more resilient to unclean shutdowns.
  • Foreign key constraints — MyISAM silently ignores them.
-- Check what engine a table is using
SHOW TABLE STATUS WHERE Name = 'legacy_table';

-- Convert an old MyISAM table to InnoDB
ALTER TABLE legacy_table ENGINE = InnoDB;

The only remaining legitimate case for MyISAM is a specific need for its full-text search implementation in a legacy setup that predates InnoDB’s own full-text support (added in MySQL 5.6) — otherwise, InnoDB is the correct default for essentially everything.