数据库的引擎

1 阅读1分钟

InnoDB 引擎

特性:

  1. 事务支持:InnoDB 是一个支持事务的存储引擎,它遵循 ACID(原子性、一致性、隔离性、持久性)的特性,可以保证数据操作的完整性和一致性。
  2. 行级锁定:InnoDB 使用行级锁定(row-level locking),这意味着它可以在数据操作时锁定行而不是整个表,提高了多用户并发操作的性能。
  3. 外键支持:InnoDB 提供了对外键的支持,可以在数据库中实现参照完整性约束,保证了数据之间的关联性。
  4. 崩溃恢复:InnoDB 使用事务日志(redo log)来记录所有的数据更改操作,以支持数据库的崩溃恢复,保证了数据的持久性和可靠性。
  5. 自动增长的主键:InnoDB 支持自动增长(AUTO_INCREMENT)的主键字段,方便了对于表的主键字段的管理。

优点:

  • 适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景。
  • 具有良好的并发性能和可靠性,适合于大型高并发的在线事务处理(OLTP)系统。
  • 支持外键约束,有助于维护数据的一致性和完整性。

缺点:

  • 在某些情况下,由于行级锁定的开销,可能会导致一些性能损失。
  • 在大量写入操作的场景下,由于需要维护事务日志,可能会产生一定的额外开销。

适用场景:

  • 金融系统、电子商务平台等对数据完整性要求高的应用场景。
  • 高并发的在线事务处理系统。

MyISAM  [maiˈzæm]引擎

特性:

  1. 表级锁定:MyISAM 使用表级锁定(table-level locking),这意味着在对表进行读写操作时会锁定整个表,导致并发性能较差。
  2. 不支持事务:MyISAM 不支持事务,对数据的一致性和完整性要求较低。
  3. 不支持外键:MyISAM 不支持外键约束,需要在应用层面来维护数据之间的关联性。
  4. 不支持崩溃恢复:MyISAM 不支持崩溃恢复,一旦发生数据库崩溃,可能导致数据丢失或不一致。
  5. 全文索引:MyISAM 支持全文索引(Full-Text Indexing),在对文本内容进行搜索时具有一定的优势。

优点:

  • 适用于读操作远远多于写操作的场景,例如报表系统、数据分析系统等。
  • 对于一些简单的应用场景,由于不需要维护事务日志等额外开销,可能具有一定的性能优势。

缺点:

  • 不支持事务和外键约束,可能导致数据的一致性和完整性难以保证。
  • 表级锁定导致并发性能较差,在高并发场景下可能会成为瓶颈。

适用场景:

  • 读操作远远多于写操作的应用场景,例如报表系统、数据分析系统等。
  • 对事务支持要求较低的简单应用场景。

总的来说,InnoDB 引擎适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景,而 MyISAM 引擎则适用于读操作远远多于写操作的场景,对事务支持要求不高的简单应用。在选择引擎时,需要根据应用的特点和需求来进行合适的选择。

小节

特性 / 优缺点 / 场景InnoDB 引擎MyISAM 引擎
事务支持支持,遵循 ACID 特性不支持事务
锁定级别行级锁定表级锁定
外键支持支持不支持
崩溃恢复支持,通过事务日志不支持
并发性能较高,适用于高并发场景较差,可能成为瓶颈
全文索引支持支持
适用场景数据完整性要求高、并发操作频繁、需要事务支持的应用读操作远远多于写操作的应用,对事务支持要求不高的简单应用

根据以上对比,InnoDB 引擎适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景,而 MyISAM 引擎适用于读操作远远多于写操作的场景,对事务支持要求不高的简单应用

聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块。

聚簇索引(clustered index)不是单独的一种索引类型,而是一种数据存储方式。这种存储方式是依靠B+树来实现的,根据表的主键构造一棵B+树且B+树叶子节点存放的都是表的行记录数据时,方可称该主键索引为聚簇索引。聚簇索引也可理解为将数据存储与索引放到了一块,找到索引也就找到了数据。

非聚簇索引:数据和索引是分开的,B+树叶子节点存放的不是数据表的行记录。

虽然InnoDB和MyISAM存储引擎都默认使用B+树结构存储索引,但是只有InnoDB的主键索引才是聚簇索引,InnoDB中的辅助索引以及MyISAM使用的都是非聚簇索引。每张表最多只能拥有一个聚簇索引。