MySql-09-存储引擎

提到数据库就会说到存储引擎,这里做一下简单的比较

特征 MyISAM BDB Memory InnoDB Archive NDB
存储限制 64TB
事务处理
锁定粒度
MVCC/快照读
地理空间支持
B-Tree 索引
Hash 索引
全文搜索索引
数据缓存
索引缓存
压缩数据
加密数据
大批量插入速度 非常高
存储成本 N/A 非常低
内存成本 中等
集群数据库支持
数据复制支持
外键支持
备份/时间点恢复
查询缓存支持
数据字典更新统计

这里主要对 InnoDB 与 MyISAM 进行比较

MyISAM 特点:

  • 不支持事务处理:MyISAM 不支持事务的原子性和一致性,因此在并发写入的情况下可能出现数据不一致的问题。
  • 表级锁定:MyISAM 使用表级锁定,即当对某个表进行写操作时,会锁定整个表,这可能导致并发性能较差。
  • 较快的读取性能:由于没有事务处理和行级锁定的开销,MyISAM 在读取操作上具有较高的性能。
  • 支持全文搜索:MyISAM 提供全文索引功能,使得对文本字段进行高效的全文搜索成为可能。
  • 较低的存储和内存成本:相比其他存储引擎,MyISAM 具有较低的存储和内存消耗。

InnoDB 特点:

  • 支持事务处理:InnoDB 支持事务的原子性、一致性、隔离性和持久性(ACID 特性),能够保证数据的完整性。
  • 行级锁定:InnoDB 使用行级锁定,可以实现更好的并发性能,不同事务可以同时修改不同行的数据。
  • 支持外键约束:InnoDB 支持定义外键约束,可以确保数据的引用完整性。
  • 支持崩溃恢复:InnoDB 具有崩溃恢复机制,能够在数据库崩溃或停电后自动恢复数据的一致性。
  • 支持 MVCC:InnoDB 使用多版本并发控制(MVCC)来处理读写冲突,可以实现更好的并发性能。

MyISAM 适用场景:

  1. 读取密集型应用:MyISAM 在读取操作上具有较好的性能,适合于读取密集型的应用,如数据报表、数据分析等场景。
  2. 高并发读取:如果应用需要处理大量并发的读取请求,而对数据一致性和事务支持要求较低,MyISAM 可能是一个选择。
  3. 非关键数据存储:如果存储的数据不太重要,或者有备份机制保证数据可恢复性,可以考虑使用 MyISAM

InnoDB 适用场景:

  1. 事务处理:如果应用需要支持事务的原子性、一致性、隔离性和持久性,或者需要进行复杂的数据操作和更新,应选择 InnoDB。
  2. 并发写入:InnoDB 使用行级锁定,支持高并发的写入操作,适合于高并发写入的应用场景,如电子商务、社交网络等。
  3. 数据完整性和安全性要求高:如果应用需要强制执行外键约束,保证数据引用的完整性,或者需要更高的数据安全性,使用 InnoDB 是一个较好的选择。
  4. 数据库崩溃恢复:InnoDB 具有崩溃恢复机制,能够在数据库崩溃或停电后自动恢复数据的一致性,适用于对数据可靠性要求较高的应用场景。

参考链接

  1. https://pdai.tech/md/db/sql-mysql/sql-mysql-execute.html