InnoDB 引擎
特性:
- 事务支持:InnoDB 是一个支持事务的存储引擎,它遵循 ACID(原子性、一致性、隔离性、持久性)的特性,可以保证数据操作的完整性和一致性。
- 行级锁定:InnoDB 使用行级锁定(row-level locking),这意味着它可以在数据操作时锁定行而不是整个表,提高了多用户并发操作的性能。
- 外键支持:InnoDB 提供了对外键的支持,可以在数据库中实现参照完整性约束,保证了数据之间的关联性。
- 崩溃恢复:InnoDB 使用事务日志(redo log)来记录所有的数据更改操作,以支持数据库的崩溃恢复,保证了数据的持久性和可靠性。
- 自动增长的主键:InnoDB 支持自动增长(AUTO_INCREMENT)的主键字段,方便了对于表的主键字段的管理。
优点:
- 适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景。
- 具有良好的并发性能和可靠性,适合于大型高并发的在线事务处理(OLTP)系统。
- 支持外键约束,有助于维护数据的一致性和完整性。
缺点:
- 在某些情况下,由于行级锁定的开销,可能会导致一些性能损失。
- 在大量写入操作的场景下,由于需要维护事务日志,可能会产生一定的额外开销。
适用场景:
- 金融系统、电子商务平台等对数据完整性要求高的应用场景。
- 高并发的在线事务处理系统。
MyISAM [maiˈzæm]引擎
特性:
- 表级锁定:MyISAM 使用表级锁定(table-level locking),这意味着在对表进行读写操作时会锁定整个表,导致并发性能较差。
- 不支持事务:MyISAM 不支持事务,对数据的一致性和完整性要求较低。
- 不支持外键:MyISAM 不支持外键约束,需要在应用层面来维护数据之间的关联性。
- 不支持崩溃恢复:MyISAM 不支持崩溃恢复,一旦发生数据库崩溃,可能导致数据丢失或不一致。
- 全文索引:MyISAM 支持全文索引(Full-Text Indexing),在对文本内容进行搜索时具有一定的优势。
优点:
- 适用于读操作远远多于写操作的场景,例如报表系统、数据分析系统等。
- 对于一些简单的应用场景,由于不需要维护事务日志等额外开销,可能具有一定的性能优势。
缺点:
- 不支持事务和外键约束,可能导致数据的一致性和完整性难以保证。
- 表级锁定导致并发性能较差,在高并发场景下可能会成为瓶颈。
适用场景:
- 读操作远远多于写操作的应用场景,例如报表系统、数据分析系统等。
- 对事务支持要求较低的简单应用场景。
总的来说,InnoDB 引擎适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景,而 MyISAM 引擎则适用于读操作远远多于写操作的场景,对事务支持要求不高的简单应用。在选择引擎时,需要根据应用的特点和需求来进行合适的选择。
小节
特性 / 优缺点 / 场景 | InnoDB 引擎 | MyISAM 引擎 |
事务支持 | 支持,遵循 ACID 特性 | 不支持事务 |
锁定级别 | 行级锁定 | 表级锁定 |
外键支持 | 支持 | 不支持 |
崩溃恢复 | 支持,通过事务日志 | 不支持 |
并发性能 | 较高,适用于高并发场景 | 较差,可能成为瓶颈 |
全文索引 | 支持 | 支持 |
适用场景 | 数据完整性要求高、并发操作频繁、需要事务支持的应用 | 读操作远远多于写操作的应用,对事务支持要求不高的简单应用 |
根据以上对比,InnoDB 引擎适用于对数据完整性要求高、并发操作频繁、需要事务支持的应用场景,而 MyISAM 引擎适用于读操作远远多于写操作的场景,对事务支持要求不高的简单应用。
聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块。
聚簇索引(clustered index)不是单独的一种索引类型,而是一种数据存储方式。这种存储方式是依靠B+树来实现的,根据表的主键构造一棵B+树且B+树叶子节点存放的都是表的行记录数据时,方可称该主键索引为聚簇索引。聚簇索引也可理解为将数据存储与索引放到了一块,找到索引也就找到了数据。
非聚簇索引:数据和索引是分开的,B+树叶子节点存放的不是数据表的行记录。
虽然InnoDB和MyISAM存储引擎都默认使用B+树结构存储索引,但是只有InnoDB的主键索引才是聚簇索引,InnoDB中的辅助索引以及MyISAM使用的都是非聚簇索引。每张表最多只能拥有一个聚簇索引。