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