文章目录
- 前言
- 1. InnoDB
- 特点
- 2. MyISAM
- 特点
- innodb与myisam引擎之间的区别
- 3. MEMORY
- 特点
- 4. ARCHIVE
- 特点
- 5. NDBCluster
- 特点
- 6. FEDERATED
- 特点
- 7. CSV
- 特点
- 总结
前言
MySQL 支持多种存储引擎,每种引擎都有其独特的功能和适用场景。存储引擎是指数据库管理系统用来存储、检索和索引数据的方法。不同的存储引擎提供了不同的特性,例如事务支持、并发控制、锁定粒度等。以下是 MySQL 中常用的几种存储引擎及其特点:
1. InnoDB
InnoDB 是 MySQL 默认的存储引擎,支持事务(ACID)、外键约束、行级锁定和 MVCC(多版本并发控制)。InnoDB 被广泛应用于需要高可靠性的应用程序中,尤其是在需要事务支持的情况下。
特点
- 支持事务处理(ACID)。
- 原子性(Atomicity):事务作为一个整体被执行,包含在事务中的所有操作要么都完成,要么都不完成。
- 一致性(Consistency):事务开始前和结束后,数据库都必须处于一致性状态。
- 隔离性(Isolation):并发执行的事务彼此隔离,一个事务的执行不应影响另一个事务。
- 持久性(Durability):一旦事务提交,它对数据库的影响将是永久的,即使系统发生故障也是如此
- 支持外键约束。
InnoDB 支持外键约束,这有助于维护数据库的一致性和完整性。通过定义外键,可以确保引用完整性,即在一个表中引用的记录在另一个表中确实存在。 - 行级锁定,有利于高并发应用。
InnoDB 使用行级锁定机制,这允许在并发环境中提高数据的并发访问能力。行级锁只锁定实际涉及的行,而不会锁定整个表,从而减少了锁争用的情况。 - MVCC(多版本并发控制)
InnoDB 使用多版本并发控制来支持读取未提交的事务数据而不干扰正在进行的事务。这意味着多个事务可以同时读取同一份数据的不同版本,而不会互相阻塞。 - 索引
InnoDB 使用 B+ 树作为索引结构,支持唯一索引和非唯一索引。此外,InnoDB 还支持空间索引(用于地理信息系统)。 - BufferPool缓冲池
InnoDB 使用缓冲池来缓存表和索引的数据,以减少磁盘 I/O 操作,提高查询性能。
2. MyISAM
MyISAM 是 MySQL 较早使用的默认存储引擎,不支持事务处理,但是提供了高速的存储和检索功能。MyISAM 通常用于读取密集型的应用场景。
特点
- 不支持事务处理。
- 支持全文索引。
- 表级锁定(整个表被锁定),并发性能较差。
- 支持压缩表(COMPRESSED TABLES)。
- 支持自动增量。
innodb与myisam引擎之间的区别
1.myisam没有事务
2.myisam没有行锁,只有表锁(使用不当会导致锁表)
mysql8去除了myisam引擎
3.innoDB存在事务acid原则
4.innoDB有行锁
5.innoDB使用聚集索引(主键索引)方式进行数据存储,myisam使用非聚集索引叶子节点存储的是数据的内存地址。
6.innoDB支持外键关系保证数据完整性(不常用)
3. MEMORY
MEMORY 引擎将所有数据存储在内存中,提供极高的读写速度,但是不适合存储大量的数据或持久化数据。适用于临时表和高速缓存。
特点
- 数据存储在内存中,速度快。
- 支持哈希索引。
- 适合小规模数据和临时表。
- 数据在 MySQL 重启后丢失。
4. ARCHIVE
ARCHIVE 引擎主要用于数据归档,提供极高的压缩率,只支持 SELECT 和 INSERT 操作。
特点
- 极高的压缩率。
- 只支持 SELECT 和 INSERT 操作。
- 适合存储大量很少查询的历史数据。
5. NDBCluster
NDBCluster 是 MySQL 用于集群环境的存储引擎,提供了高可用性和可扩展性。
特点
- 支持分布式的集群环境。
- 数据和索引存储在内存中。
- 提供高可用性和故障转移机制。
- 适合读写密集型应用。
6. FEDERATED
FEDERATED 存储引擎允许在本地 MySQL 服务器上访问远程 MySQL 服务器上的数据。
特点
- 透明地访问远程数据。
- 需要远程服务器的支持。
- 安全性问题需要注意。
7. CSV
CSV 引擎将数据存储为纯文本文件,每行一条记录,字段之间用逗号分隔。
特点
- 简单的数据存储格式。
- 便于导入导出数据。
- 不支持索引。
总结
选择哪种存储引擎取决于你的应用需求。如果需要支持事务处理并且对数据的一致性要求较高,那么 InnoDB 是最合适的选择。如果你的应用主要是读取操作,并且不需要事务支持,那么 MyISAM 就是一个不错的选择。对于临时数据存储或者需要极高性能的场景,MEMORY 引擎可能更适合。而对于历史数据归档,可以考虑使用 ARCHIVE 引擎。