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 表锁 支持 支持 不支持 不支持 支持 支持
相关推荐
小爬虫程序猿6 分钟前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
C吴新科4 小时前
MySQL入门操作详解
mysql
Ai 编码助手7 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员7 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻7 小时前
MySQL排序查询
数据库·mysql
萧鼎7 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋37 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx