1. InnoDB和MyISAM
在MySQL的存储引擎中,只有InnoDB支持Transaction(事务)、XA(分布式事务)
2. 区别:
类型 | InnoDB | MyISAM |
---|---|---|
事务 | 支持,强调的是保持数据一致性的高级功能 | 不支持,强调的是性能,查询速度比InnoDB快 |
外键 | 支持 | 不支持 |
索引 | 使用聚集索引,索引文件和数据文件绑定 | 使用非聚集索引,索引文件和数据文件分开储存,索引中保存的是数据文件的指针 |
锁 | 支持表级锁、行级锁;行级锁粒度小,处理并发的能力更强 | 支持表级锁,用户在执行insert、update、select、delete时都会给表自动加锁,效率低 |
主键 | 表必须有唯一索引,没有的话会用默认隐藏列row_id作为唯一索引 | 没有要求 |
3. 总结:
- MyISAM对于不支持事务并且存在大量SELECT的读场景比较合适;
- 如果业务代码中要支持事务,必须选择InnoDB存储引擎;
- 如果业务代码中要支持外键,必须选择InnoDB存储引擎。