People often talk about performance, reads vs. writes, foreign keys, etc. but there's one other must-have feature for a storage engine in my opinion: atomic updates.
Try this:
- Issue an UPDATE against your MyISAM table that takes 5 seconds.
- While the UPDATE is in progress, say 2.5 seconds in, hit Ctrl-C to interrupt it.
- Observe the effects on the table. How many rows were updated? How many were not updated? Is the table even readable, or was it corrupted when you hit Ctrl-C?
- Try the same experiment with UPDATE against an InnoDB table, interrupting the query in progress.
- Observe the InnoDB table. Zero rows were updated. InnoDB has assured you have atomic updates, and if the full update could not be committed, it rolls back the whole change. Also, the table is not corrupt. This works even if you use
killall -9 mysqld
to simulate a crash.
Performance is desirable of course, but not losing data should trump that.