MySQL中各存储引擎的区别

一、什么是存储引擎

存储引擎(表处理器)指表的类型,接收上层传下来的指令,存储数据,对表中数据进行提取或写入操作。

fd91911f3227422babaf525d900af829.png

 二、MySQL提供哪些存储引擎

265881a9745f40a48b3cf94747505322.png

 默认存储引擎为InnoDB,支持事务,行级锁,支持外键

  •  查看默认存储引擎
show variables like '%storage_engine%';
  • 修改默认引擎(还有建表时设置,配置文件设置)
set default_storage_engine=MyISAM;

三、各引擎对照

1、InnoDB引擎

  • 事务型引擎(对已提交的内容定型,未提交的回滚)
  • 数据文件结构(.frm 存储表结构、.ibd 存储表数据及索引)MySQL8.0时将 表结构、索引和数据存放一个文件 .ibd
  • 占用更多磁盘空间保存 索引+真实数据,所以内存加载时占用也比较大
  • 支持外键、行级锁(适合高并发场景)

2、MyISAM引擎

  • MySQL5.5之前默认引擎,不支持(事务,行级锁,外键),系统奔溃无法安全恢复
  • 数据文件结构(.frm 存储表结构、.MYD 存储数据、.MYI 存储索引)
  • 只缓存索引,不缓存真实数据(索引+真实数据地址),处理速度快
  • 表锁(不适合高并发)
  • 应用只读应用或已读为主的业务

3、Archive(归档)引擎

  • 仅仅支持插入和查询功能(插入后不能修改)
  • 适合日志和数据采集(档案)类应用;适合储存历史记录的数据
  • MySQL5.5后支持索引、拥有很高的插入速度,但是对查询支持较差
  • 行级锁,支持自递增主键(AUTO_INCREMENT)
  • 数据文件 .ARZ,使用zlib压缩库,实时压缩,用作仓库
  • Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。当数据量非常大的时候Archive的插入性能表现会较MyISAM为佳,较小的空间占用也能在你移植MySQL数据的时候发挥作用。当你需要把数据从一台MySQL服务器转移到另一台的时候,Archive表可以方便地移植到新的MySQL环境,你只需将保存Archive表的底层文件复制过去

4、CSV引擎

  • 不支持索引,可将csv文件作为MySQL表来处理
  • CSV也可以作为一种 数据交换的机制 ,比如JSON、XML(Python中用的比较多)
  • .csv文件可使用文本编辑器,execl直接查看

MySQL使用CSV引擎时,字段必须使用 NOT NULL,否则报错

create table test (id int NOT NULL,...) ENGINE = CSV;

5、Memory 引擎

  • 数据文件与索引分开存储
  • 采用的逻辑介质为 内存,响应速度快,mysqld守护线程奔溃,数据丢失
  • 要求存储数据长度不变,Blob与Text类型的数据不可用(长度不固定)
  • 支持 哈希索引 和 B+树索引
  • memory表大小受限,表大小取决于max_rows(自定义)与max_heap_table_size默认16MB两个参数

 


版权声明:本文为qq_45524787原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。