目录

Mysql 体系结构介绍

MyIsam存储引擎

Innodb存储引擎

CSV存储引擎

Memory存储引擎


Mysql 体系结构介绍

  • 客户端
  • Mysql服务层(连接管理器、查询缓存、查询解析、查询优化器)
  • 存储引擎层(MyIsam、Innodb、CSV、Memory...)

了解Mysql的体系结构对于弄懂存储引擎有一定的帮助,如下图:

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 => 表数据文件

# 由系统表空间迁移到独立表空间

  1. 使用mysqldump导出所有数据库表数据,包括触发器,存储过程等;
  2. 停止Mysql服务,修改配置参数innodb_file_per_table=ON,并删除Innodb相关文件;
  3. 启动Mysql服务,重建Innodb系统表空间;
  4. 重新导入数据;

# 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参数决定

# 适用场景

  • 用于查找或者是映射表;
  • 用于保存数据分析中产生的中间表;
  • 用于缓存周期性聚合数据的结果表;

相关文章: