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服务器性能)等。

相关推荐
huaqianzkh25 分钟前
Redis的内存预分配策略
数据库·redis·缓存
有馬公生32 分钟前
有关Redis的相关概述
数据库·redis·缓存
qincjun35 分钟前
Qt仿音乐播放器:数据库持久化
开发语言·数据库·qt
码农君莫笑40 分钟前
管理加密SQLite数据库的软件工具研究
数据库·python·sqlite
YiHanXii41 分钟前
Redis相关面试
数据库·redis·面试
瞳绣1 小时前
【redis初阶】初识Redis
数据库·redis·缓存
小盼江2 小时前
智能服装推荐系统 协同过滤余弦函数推荐服装 Springboot Vue Element-UI前后端分离
大数据·数据库·vue.js·spring boot·ui·毕业设计
鸿永与2 小时前
『SQLite』解释执行(Explain)
数据库·sqlite
鸿永与2 小时前
『SQLite』子查询可以这样用
数据库·sqlite
CodeChampion2 小时前
69.基于SpringBoot + Vue实现的前后端分离-家乡特色推荐系统(项目 + 论文PPT)
java·vue.js·spring boot·mysql·elementui·node.js·mybatis