MySQL 存储引擎是 MySQL 数据库系统的核心组件之一,负责管理数据的存储和检索。存储引擎是 MySQL 中的一个重要概念,它定义了如何在磁盘上存储数据、如何进行数据检索和操作,以及数据库的一些特性和行为。每个表都可以使用不同的存储引擎,你可以根据实际需求为每个表选择最合适的存储引擎。这样的灵活性使得 MySQL 能够满足不同应用场景的需求,例如事务处理、高性能读取、内存表、集群和归档等。
1.MySQL不同存储引擎
1. InnoDB(常用)
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,支持自动增长列,外键等功能, 索引采用聚集索引,索引和数据存储在同一个文件,所以InnoDB的表在磁盘上有两个文件,其文件名 都和表名相同,扩展名分别是: .frm(存储表的定义) .ibd(存储数据和索引)
- 特性: InnoDB是MySQL默认的存储引擎,支持事务处理和外键约束。
- 优点 :
- 支持ACID(原子性、一致性、隔离性、持久性)事务。
- 行级锁定,适合高并发环境。
- 外键支持,确保数据完整性。
- 崩溃恢复能力强,适合需要高可靠性的应用。
- 缺点 :
- 较高的内存使用。
- 在某些简单查询中性能可能不如MyISAM。
2. MyISAM(常用)
MyISAM 不支持事务、也不支持外键,索引采用非聚集索引,其优势是访问的速度快,对事务完整性没 有要求,以 SELECT、INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。MyISAM的表在磁 盘上存储成 3 个文件,其文件名都和表名相同,扩展名分别是: .frm(存储表定义) .MYD(MYData,存储数据) .MYI (MYIndex,存储索引)
- 特性: MyISAM在MySQL 5.5版本之前是默认的存储引擎,不支持事务和外键。
- 优点 :
- 读操作性能非常高,适合以读为主的应用。
- 占用空间小,存储效率高。
- 全文搜索支持。
- 缺点 :
- 不支持事务处理。
- 表级锁定,写操作时可能会导致锁等待,影响并发性能。
- 崩溃恢复能力较差。
3. MEMORY(HEAP)
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,支持自动增长列,外键等功能, 索引采用聚集索引,索引和数据存储在同一个文件,所以InnoDB的表在磁盘上有两个文件,其文件名 都和表名相同,扩展名分别是: .frm(存储表的定义) .ibd(存储数据和索引)
- 特性: MEMORY引擎将表的数据存储在内存中,适用于需要快速访问的数据。
- 优点 :
- 读写速度非常快,因为数据在内存中。
- 临时表的理想选择。
- 缺点 :
- 数据不持久,服务器重启或崩溃后数据丢失。
- 不支持表超过内存大小的数据量。
4. MERGE
- 特性: MERGE存储引擎允许将多个MyISAM表合并为一个虚拟表,主要用于拆分大型表。
- 优点 :
- 可以处理非常大的表。
- 各表的数据可以独立维护。
- 缺点 :
- 只支持MyISAM表。
- 不支持事务。
5. Archive
- 特性: Archive引擎设计用于存储和检索大量的历史数据,压缩存储。
- 优点 :
- 高压缩率,节省存储空间。
- 写操作性能好,适合日志等数据的存储。
- 缺点 :
- 仅支持INSERT和SELECT操作,不支持UPDATE和DELETE。
- 不支持事务和索引。
6. CSV
- 特性: CSV引擎将数据存储为逗号分隔值(CSV)文件,适合与其他应用交换数据。
- 优点 :
- 易于与外部系统进行数据交换。
- 缺点 :
- 性能低,不适合大数据量或复杂查询。
- 不支持索引、事务和并发控制。
7. Federated
- 特性: Federated引擎允许在远程MySQL服务器上的表之间创建联合存储。
- 优点 :
- 可以跨多个服务器分布式存储数据。
- 缺点 :
- 性能和可靠性依赖于网络和远程服务器。
- 不支持事务和本地索引。
8. NDB (Clustered)
- 特性: NDB Cluster存储引擎适用于分布式数据库环境,支持MySQL Cluster。
- 优点 :
- 高可用性和高可扩展性。
- 数据在多个节点上自动分片和复制。
- 缺点 :
- 复杂配置和管理。
- 较高的硬件要求。
2.各种存储引擎区别
锁机制:表示数据库在并发请求访问的时候,多个事务在操作时,并发操作的粒度。
B-树索引和哈希索引:主要是加速SQL的查询速度。
外键:子表的字段依赖父表的主键,设置两张表的依赖关系。
事务:多个SQL语句,保证它们共同执行的原子操作,要么成功,要么失败,不能只成功一部分,失败 需要回滚事务。
索引缓存和数据缓存:和MySQL Server的查询缓存相关,在没有对数据和索引做修改之前,重复查询 可以不用进行磁盘I/O(数据库的性能提升,目的是为了减少磁盘I/O操作来提升数据库访问效率),读 取上一次内存中查询的缓存就可以了。
种类 | 锁机制 | B-树索引 | 哈希索引 | 外键 | 事务 | 索引缓存 | 数据缓存 |
---|---|---|---|---|---|---|---|
MyISAM | 表锁 | 支持 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 |
InnoDB | 行锁 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 |
Memory | 表锁 | 支持 | 支持 | 不支持 | 不支持 | 支持 | 支持 |