对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
锁 | 表锁,操作一条记录也会锁住整个表,不适合高并发 | 行锁,操作只锁一行,不影响其他行,适合高并发 |
缓存 | 只缓存索引,不缓存数据 | 缓存索引和数据,对内存要求高 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
关键是前两条。InnoDB把每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务。
InnoDB不保存表的具体行数,执行select count(*) from table
时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。
如果表中绝大多数都只是读查询,可以考虑MyISAM;如果写操作多或者读写都挺频繁,请使用InnoDB。如果数据库平台要达到高稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。系统奔溃后,MyISAM恢复起来更困难。MySQL5.5版本开始Innodb已经成为Mysql的默认引擎。