mysql数据库的innodb和myisam存储引擎区别
mysql数据库有多种存储引擎,但最常用的两个是 innodb 和 myisam。
它们之间有很多区别,下面详细说明其主要特点和区别。
innodb
事务支持:
- 支持事务:innodb 支持 acid(原子性、一致性、隔离性、持久性)四大特性,能够保证事务的可靠性。
- 回滚(rollback):支持回滚和崩溃恢复。
外键:
- 支持外键:innodb 支持外键和参照完整性约束,可以在多个表之间建立关系。
行级锁定:
- 行级锁:innodb 支持行级锁定(row-level locking),并发控制性能好,适用于高并发的写操作场景。
崩溃恢复:
- 崩溃恢复:提供崩溃恢复机制,通过它的日志文件(redo log和undo log)在系统崩溃后恢复数据。
表空间:
- 表空间管理:innodb 使用多表空间(tablespaces)来管理数据文件。
文件格式:
- 数据文件和索引文件:存储在表空间文件中,通常带有.ibd扩展名。
myisam
事务支持:
- 不支持事务:myisam 不支持事务,因此不具备事务的 acid 特性。
外键:
- 不支持外键:myisam 不支持外键约束,无法保证参照完整性。
表级锁定:
- 表级锁:myisam 使用表级锁定(table-level locking),并发写性能较差,适用于读操作频繁的场景。
崩溃恢复:
- 简单恢复机制:myisam 的崩溃恢复能力较差,只能通过检查和修复工具进行简单恢复。
表空间:
- 单独表文件:每个表有单独的三个文件:.frm(表结构)、.myd(数据文件)和 .myi(索引文件)。
全文索引:
- 全文索引:myisam 提供内建的全文搜索功能,适合一些需要全文检索的应用。
区别总结
特性 | innodb | myisam |
---|---|---|
事务支持 | 支持 acid 事务 | 不支持 |
外键支持 | 支持 | 不支持 |
锁定机制 | 行级锁(row-level locking) | 表级锁(table-level locking) |
崩溃恢复 | 日志文件支持崩溃恢复 | 仅支持简单的检查和修复工具 |
表空间管理 | 使用表空间文件 | 每个表有单独的表结构和数据索引文件 |
文件扩展名 | .ibd(数据和索引) | .frm, .myd, .myi |
全文索引 | 从 mysql 5.6 开始支持 | 内置全文索引支持 |
数据完整性 | 支持参照约束和外键 | 不支持参照完整性检查 |
数据读取速度 | 适用于高并发写操作,读取速度较慢 | 读取速度快,适用于读多写少的场景 |
适用场景 | 银行、金融等高可靠性要求的系统 | 日志、数据仓库等读操作多的系统 |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论