InnoDB 和 MyISAM 的区别
【摘要】 InnoDB 和 MyISAM 是 MySQL 最常用的两种存储引擎,选错引擎可能会让业务踩坑。第一,事务支持不同。InnoDB 支持 ACID 事务,支持提交和回滚,MyISAM 不支持事务,只能一条一条执行。第二,锁机制不同。InnoDB 默认使用行级锁,配合间隙锁能很好地支持并发,适合高并发写入;MyISAM 只有表级锁,写操作会锁住整张表,并发能力差。第三,崩溃恢复能力不同。Inno...
InnoDB 和 MyISAM 是 MySQL 最常用的两种存储引擎,选错引擎可能会让业务踩坑。
第一,事务支持不同。InnoDB 支持 ACID 事务,支持提交和回滚,MyISAM 不支持事务,只能一条一条执行。
第二,锁机制不同。InnoDB 默认使用行级锁,配合间隙锁能很好地支持并发,适合高并发写入;MyISAM 只有表级锁,写操作会锁住整张表,并发能力差。
第三,崩溃恢复能力不同。InnoDB 通过 redo log 和 undo log 保证崩溃后数据可以恢复,MyISAM 崩溃后容易出现数据损坏,需要手工修复。
第四,主键和索引结构不同。InnoDB 的表必须定义主键,数据文件本身就是按主键组织的聚簇索引;MyISAM 的索引和数据是分开的文件,表可以没有主键。
第五,空间占用不同。MyISAM 不支持外键,索引和数据分离,通常会更省空间。
结论很明确:从 MySQL 5.5 开始 InnoDB 已是默认引擎,绝大多数业务都应该选择 InnoDB,只有在只读、追求极致查询速度且能接受数据风险的少数场景才考虑 MyISAM。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)