Mysql存储引擎

前言

介绍

  • 插拔式的插件方式
  • 存储引擎是指定在表之上的,即一个库中的每一个表都可以指定专用的存储引擎
  • 不管表采用什么样的存储引擎,都会在数据区,产生对应的一个frm文件(表结构定义描述文件)

    1
    -rw-rw---- 1 mysql mysql  8586 12月  6 18:56 sys_user.frm

各存储引擎对比

查看官网:https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html

CSV 存储引擎

数据存储以CSV文件:

1
-rw-rw---- 1 mysql mysql     0 12月 18 19:27 table_csv.CSV

看其文件内容:

1
2
1,"chen"
2,"jian"

存储的就是我们的表数据

特点:

  1. 不能定义索引、列定义必须为NOT NULL、不能设置自增列

    不适用大表或者数据的在线处理

  2. CSV数据的存储用 , 隔开,可直接编辑CSV文件进行数据的编排

    数据安全性低(编辑之后,要生效使用flush table XXX 命令)

应用场景:

  1. 数据的快速导出导入
  2. 表格直接转换成CSV

Archive 存储引擎

压缩协议进行数据的存储,数据存储为 ARZ 文件格式

1
-rw-rw---- 1 mysql mysql  8674 12月 18 19:40 table_archive.ARZ

特点:

  1. 只支持 insertselect 两种操作
  2. 只允许自增ID列建立索引
  3. 行级锁
  4. 不支持事务
  5. 数据占用磁盘少

应用场景:

  1. 日志系统
  2. 大量的设备数据采集

Memory 存储引擎

数据都是存储在内存中,IO效率要比其他引擎高很多,服务重启数据丢失,内存数据表默认只有16M

特点:

  1. 支持hash索引,B tree索引,默认hash(查找复杂度 0(1)
  2. 字段长度都是固定长度 varchar(32)=char(32)
  3. 不支持大数据存储类型字段如 blogtext
  4. 表级锁

应用场景:

  1. 等值查找热度较高数据
  2. 查询结果内存中的计算,大多数都是采用这种存储引擎作为临时表存储需计算的数据

实际应用中不常用

Myisam 存储引擎

Mysql5.5 版本之前的默认存储引擎

较多的系统表也还是使用这个存储引擎

系统临时表也会用到 Myisam 存储引擎(Memory 存储引擎不支持的情况下,比如数据超过了16M)

1
2
-rw-rw---- 1 mysql mysql     0 12月 18 16:30 table_myisam.MYD
-rw-rw---- 1 mysql mysql 1024 12月 18 16:30 table_myisam.MYI

特点:

  1. select count(*) from table 无需进行数据的扫描(有专门存储)
  2. 数据(.MYD)和索引(.MYI)分开存储
  3. 表级锁
  4. 不支持事务

InnoDB 存储引擎

Mysql5.5及以后版本的默认存储引擎

1
-rw-rw---- 1 mysql mysql 98304 12月  6 19:00 table_innodb.ibd

特点:

  1. 支持事务ACID
  2. 行级锁
  3. 聚集索引(主键索引)方式进行数据存储
  4. 支持外键关系保证数据完整性(尽量不要用)