MySQL的存储引擎

MySQL 的存储引擎是数据库底层用于管理数据存储、索引、事务、锁机制等核心功能的组件,不同存储引擎有不同的特性,适用于不同的业务场景。MySQL 支持多种存储引擎(可通过 SHOW ENGINES; 查看),其中最常用的是 InnoDB、MyISAM,此外还有 Memory、CSV、Archive 等特殊场景引擎。

一、InnoDB(MySQL 5.5+ 默认存储引擎)

1.核心特性

1.1.支持事务

        完全支持事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)

        通过 redo log(重做日志)保证事务持久性,undo log(回滚日志)支持事务回滚。

1.2.行级锁和并发控制

        支持行级锁(仅锁定修改的行,而非整个表),大幅提升多用户并发写入性能。

        结合 MVCC(多版本并发控制) 机制,实现 “读不加锁、写不阻塞读”,优化读写并发。

1.3.外键约束(Foreign Key)

        支持外键关联,保证数据的参照完整性(如 ON DELETE CASCADE 级联删除)。

1.4.聚簇索引

        数据物理存储按主键顺序排列(聚簇索引即主键索引),查询主键时效率极高;二级索引(非主键索引)存储主键值,需回表查询完整数据。

1.4.崩溃恢复

        依赖 redo log 实现崩溃后的数据恢复,确保意外宕机后数据不丢失。

1.5.支持全文索引(5.6+)和空间索引

        可对文本字段建立全文索引(FULLTEXT),支持复杂的文本搜索;支持地理空间数据索引。

2.使用场景

        需事务支持的业务(如电商订单、金融交易、用户账户)。

        高并发读写场景(如秒杀系统、高频交易)。

        需保证数据完整性(外键、约束)的场景。

3.存储文件

        表结构:table_name.frm(MySQL 8.0 后合并到 ibd 文件)。

        数据和索引:table_name.ibd(独立表空间,可通过 innodb_file_per_table 配置)。

二、MyISAM(MySQL 5.5 前默认存储引擎)

MyISAM 是 MySQL 早期的默认存储引擎,专注于读性能优化,但功能简单,不支持事务和行级锁,目前已逐渐被 InnoDB 替代。

1.核心特性

1.1.不支持事务和外键

        设计简单,无事务开销,读操作性能优异,但无法保证数据一致性(如崩溃后可能丢失数据)。

1.2.表级锁

        对表的读写操作加表级锁(读锁共享,写锁排他),写入时会阻塞所有读操作,并发写入性能差。

1.3.支持全文索引和压缩表

        原生支持全文索引(比 InnoDB 更早),适合静态数据的检索。

        可通过 myisampack 工具压缩表,减少磁盘占用(压缩后只读)。

1.4.非聚簇索引

        数据文件(.MYD)和索引文件(.MYI)分离,索引仅存储数据行指针,查询需通过指针定位数据。

1.5.计数器优化

        内置计数器(如 COUNT(*) 无需全表扫描,直接返回预存值),适合频繁统计行数的场景。

2.使用场景 

        只读或读多写少的场景(如博客、新闻网站的文章表)。

        无需事务的静态数据(如历史日志、归档数据)。

        需频繁执行 COUNT(*) 统计的表。

3.存储文件

        表结构:table_name.frm

        数据:table_name.MYD(MyData)。

        索引:table_name.MYI(MyIndex)。

三、Memory(临时内存引擎)

1.核心特性

1.1.内存存储

        数据存储在内存中,读写速度远高于磁盘引擎(适合缓存临时结果)。

1.2.支持哈希索引和 B+ 树索引

        默认使用哈希索引(查询单条记录极快,但不支持范围查询);也可指定 B+ 树索引(支持范围查询)

1.3.表级锁

        并发性能差,写入时阻塞所有读操作。

1.4.不支持 TEXT、BLOB 类型

        仅支持固定长度数据类型(如 CHAR 而非 VARCHAR),节省内存。

1.5.数据易失性

        服务重启或崩溃后,数据全部丢失(仅元数据保留)。

2.适用场景

        临时数据缓存(如会话数据、临时计算结果)。

        高频访问的小表(如字典表、配置表)。

        需快速查询的场景(如验证码存储、临时统计)。

3.存储文件

        表结构:table_name.frm(磁盘上)。

        数据:内存中(无磁盘文件)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值