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 表锁 支持 支持 不支持 不支持 支持 支持
相关推荐
PD我是你的真爱粉18 小时前
MySQL 锁机制:从理论分类到死锁实战
数据库·mysql·adb
Benszen18 小时前
SQL 基础及 MySQL DBA 运维实战 - 6:Mycat代理技术
sql·mysql·dba
会飞的大可18 小时前
Redis 故障排查与应急手册:从理论到实践
数据库·redis·缓存
Li emily18 小时前
解决了用美股历史数据api分析价格波动的困扰
数据库·人工智能·python
茉莉玫瑰花茶18 小时前
MySQL 存储过程与触发器超详解:从基础到实战(含面试题 + 案例)
数据库·mysql
xiaokangzhe18 小时前
MySQL故障排查与优化
数据库·mysql
圣光SG18 小时前
Java类与对象及面向对象基础核心详细笔记
java·前端·数据库
2601_9498180919 小时前
LangChain-08 Query SQL DB 通过GPT自动查询SQL
数据库·sql·langchain
ytttr87319 小时前
C# 读取数据库表结构工具设计与实现
开发语言·数据库·c#
白露与泡影19 小时前
从 BIO 到 epoll:高并发 I/O 模型演进与本质分析
java·服务器·数据库