MySQL -- 存储引擎

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 表锁 支持 支持 不支持 不支持 支持 支持
相关推荐
草莓熊Lotso43 分钟前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Lethehong6 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码7 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty7 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
roman_日积跬步-终至千里8 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
猫咪很可爱9 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy9 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒9 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss2739 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_180079052479 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api