目录
Mysql 体系结构介绍
- 客户端
- Mysql服务层(连接管理器、查询缓存、查询解析、查询优化器)
- 存储引擎层(MyIsam、Innodb、CSV、Memory...)
了解Mysql的体系结构对于弄懂存储引擎有一定的帮助,如下图:
MyIsam存储引擎
# 概述
MyIsam存储引擎是Mysql5.58之前默认的存储引擎,使用表级锁,原生支持全文索引和空间索引,但不支持事务。
# 存储文件
- myIsam.frm ==> 表结构文件
- myIsam.MYD ==> 表数据文件
- myIsam.MYI ==> 表索引文件
# 特性
- 因为使用表级锁,MyIsam存储引擎读写操作是互斥的,也可以讲是串行的,对于读写混合的并发性并不好;
- 支持表损坏修复:使用check table table_name检查表,使用repair table table_name修复表;
- MyIsam存储引擎是Mysql5.7版本之前唯一原生支持全文索引与空间索引的,并支持对text于blog数据类型建立前缀索引;
- MyIsam存储引擎支持数据压缩,但是压缩过后的表示只读的,维护与插入操作会报错;
# 适用场景
- 非事务型应用;
- 只读类应用;
- 空间类应用;
Innodb存储引擎
# 概述:
Mysql5.58及之后的版本使用Innodb存储引擎作为默认的存储引擎,Innodb是事务型存储引擎,默认使用行级锁,也可以使用表级锁;
# 存储表空间
Innodb的数据可以保存在系统表空间和独立表空间,由配置“innodb_file_per_table”控制,值为“ON”使用独立表空间,“OFF”使用系统表空间,推荐使用独立表空间:innodb_file_per_table=ON,使用独立表空间时数据文件有两个:
- innodb.frm => 表结构文件
- innodb.ibd => 表数据文件
# 由系统表空间迁移到独立表空间
- 使用mysqldump导出所有数据库表数据,包括触发器,存储过程等;
- 停止Mysql服务,修改配置参数innodb_file_per_table=ON,并删除Innodb相关文件;
- 启动Mysql服务,重建Innodb系统表空间;
- 重新导入数据;
# Innodb存储引擎特性
- Innodb是一种事务型存储引擎,完全支持事务的ACID特性;
- 为了实现事务的ACID特性,Innodb使用两个日志:Redo Log => 存储已提交的事务 和 Undo Log => 未提交的事务;
- Innodb支持行级锁,最大程度的支持并发;
# Innodb状态检查,不同的版本输出的内容不一样
# show engine innodb status;
# 适用场景
- 适合大多数应用;
CSV存储引擎
# 概述
CSV存储引擎的数据是以CSV格式的文本存储在文件中,可以直接修改文件而不会损坏数据。
# 存储文件
- csv.frm => 表结构信息
- .CSV文件存储表内容
- .CSM文件存储表的元数据如表状态和数据量
# 特点
- 以CSV格式进行数据存储
- 所有列不能为NULL
- 不支持索引
- 可以对数据文件直接编辑
# 适用场景
- 做数据交换的中间表,把电子表格转为CSV,保存在Mysql服务器,就可以供Web应用访问
Memory存储引擎
# 概述:
也称为HEAP存储引擎,所有数据保存在内存中,一旦服务器重启则所有数据都会消失,但是表结构不会丢失。
# 功能特点
- 支持HASH索引和Btree索引
- 所有字段都为固定长度 varchar(10)=char(10)
- 不支持BLOG和TEXT等大字段
- 使用表级锁
- 最大大小由max_heap_table_size参数决定
# 适用场景
- 用于查找或者是映射表;
- 用于保存数据分析中产生的中间表;
- 用于缓存周期性聚合数据的结果表;