MySQL 存储引擎

InnoDB

InnoDB是MySQL的默认存储引擎,自MySQL 5.5版本起开始使用。它提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。

  • 主要特性:

    • 事务支持:完全支持ACID(原子性、一致性、隔离性、持久性)事务特性。
    • 行级锁定:采用行级锁而非表级锁,减少了锁争用,提高了并发性能。
    • 外键约束:支持外键,确保数据的参照完整性。
    • 崩溃恢复:通过重做日志(Redo Log)和回滚日志(Undo Log)实现崩溃后的自动恢复。
    • 多版本并发控制(MVCC):实现了非阻塞的读操作,提升了并发性能。
    • 数据缓存:使用缓冲池(Buffer Pool)来缓存索引和数据,加速数据访问。
    • 表空间管理:支持共享表空间或独立表空间来存储表数据。
  • 主要优势:

    • 遵循ACID模型,能够保护用户数据。
    • 支持行级锁,提高了多用户的读取并发性和性能。
    • 访问数据时,在内存缓存表和索引数据,提高了效率。
    • 优化了基于主键的查询,每个InnoDB表都有一个聚簇索引,可以实现通过最少的磁盘IO完成查找。
    • 反复查询相同行时,自适应哈希索引会自动接管这些查询。
  • 适用场景:

    • 需要事务处理的系统,如银行、财务系统。
    • 高并发的读写操作场景。

MyISAM

MyISAM是一种比较老的存储引擎,适合读多写少的应用,不支持事务和外键。

  • 主要特性:

    • 不支持事务:MyISAM不支持事务,数据一致性只能依赖应用层控制。
    • 表级锁:使用表级锁定机制,在高并发写操作下性能较差。
    • 存储效率高:相较于InnoDB,MyISAM表的存储效率较高,磁盘占用较小。
    • 全文索引:MyISAM支持全文索引(InnoDB在MySQL 5.6之后也支持)。
    • 崩溃恢复弱:不支持崩溃恢复,发生崩溃时,可能需要手动修复表。
  • 适用场景:

    • 读操作远远多于写操作的场景。
    • 不需要事务和外键约束的系统,如一些数据仓库或数据分析应用。

MEMORY(HEAP)

MEMORY存储引擎将数据存储在内存中,具有极快的访问速度,但数据不持久化,重启后数据会丢失。

  • 主要特性:

    • 数据存储在内存中:读取速度极快,适合需要频繁读写的临时数据存储。
    • 表级锁:使用表级锁定,适合读多写少的场景。
    • 数据非持久化:重启数据库或断电时,表中的数据会丢失。
    • 存储类型受限:只能使用定长格式的数据类型,如CHAR、INT等,不支持TEXT、BLOB等数据类型。
  • 适用场景:

    • 临时表或会话数据的存储。
    • 需要高速读写但不需要持久化的数据,如缓存或快速计算。

其他存储引擎

  • CSV:CSV引擎将表数据以CSV(逗号分隔值)文件的格式存储。每个表对应一个CSV文件,数据简单易读,适合数据导出和导入。但不支持索引,因此在大数据量下查询性能较差。也不支持事务、外键和锁机制。适用于数据交换、导入导出以及非实时查询的简单数据存储。
  • ARCHIVE:ARCHIVE存储引擎专门用于大量历史数据的归档,支持高效的数据压缩,但不支持索引。只支持插入和查询操作,不支持更新和删除。适用于数据归档和历史数据存储,以及大量只读操作的日志、历史记录等。
  • FEDERATED:FEDERATED存储引擎用于将多台MySQL服务器上的表连接起来,可以在一台MySQL服务器上查询其他服务器上的表。但本地不存储实际数据,数据存储在远程服务器上。也不支持事务和索引。适用于跨服务器分布式查询以及需要整合多台MySQL服务器数据的场景。
  • NDB Cluster(MySQL Cluster):NDB是MySQL Cluster的存储引擎,提供分布式数据库功能。数据在多个节点上分布并实时同步,保证高可用性和高可靠性。支持事务,但性能相较InnoDB较差。适用于需要高可用、高扩展性和分布式存储的场景,如实时大数据处理以及高可用集群环境(如电信行业、金融行业的关键业务)。
  • TokuDB:TokuDB是一种专门用于处理大数据、高并发的存储引擎,使用Fractal Tree索引,具有高压缩率和高插入性能。支持ACID事务模型。适用于需要处理海量数据和高并发的应用场景,以及数据库存储成本较高的场景(需要数据压缩)。

此外,MySQL还有一些其他存储引擎,如BLACKHOLE(丢弃写入的数据,对于读取操作会返回一个空结果,适用于数据复制和数据传输等场景)、MERGE(可以将多个MyISAM表合并成一个逻辑表,适用于将分散的数据合并成一个逻辑表进行查询)、FEDERATED(允许MySQL服务器上的表访问其他服务器上的数据,实现数据分布式存储和访问)、PERFORMANCE_SCHEMA(用于收集MySQL服务器性能相关的统计信息,适用于监控和优化MySQL服务器性能)等。

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