文章目录
- 1. 概述
 - 2 InnoDB引擎:具备外键支持功能的引擎
 - 3. MyISAM引擎:主要的非事务处理存储引擎
 - 4. Archive 引擎:用于数据存档
 - 5. Blackhole 引擎: 丢弃写操作,读操作会返回空内容
 - 6. CSV引擎:存储数据时,以逗号分隔各个数据项
 - 7. Memory引擎:置于内存的表
 - 8. Federated引擎: 访问远程表
 - 9. Merge引擎: 管理多个MyISAM表构成的表集合
 - 10. NDB引擎: MySQL集群专用存储引擎
 
1. 概述
为了管理方便,人们把 连接管理、 查询缓存、 语法解析、 查询优化 这些并不涉及真实数据存储的功能划分为MySQL server 的功能,把真实存取数据的功能划分为 存储引擎 的功能。所以在MvSQL server 完成了查询优化后,只需按照生成的 执行计划 调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。
MySQL中提到了存储引擎的概念。简而言之,存储引擎就是指表的类型。 其实存储引擎以前叫做 表处理器,后来改名为 存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
MySQL 8.0.34默认支持的存储引擎:
show engines;
 

2 InnoDB引擎:具备外键支持功能的引擎
MySQL从3.23.34a开始就包含lnnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎。
优点:
- 支持外键(一般不使用,会影响性能)
 - 支持事务
 - 索引即数据
 
除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎,除非有特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎
缺点:
- 对比MyISAM的存储引擎,InnoDB写的处理效率差一些(针对只新增和查询的表,新增时需要生成B+树) ,并且会占用更多的磁盘空间以保存数据和索引
 - MyISAM只缓存索引,不缓存真实数据; InnoDB不仅缓存索引还要缓存真实数据对内存要求较高(需要同时将索引与数据一起加入内存),而且内存大小对性能有决定性的影响
 
3. MyISAM引擎:主要的非事务处理存储引擎
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等。5.5之前默认的存储引擎。
特点:
- 不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是 崩溃后无法安全恢复
 - 访问的速度快
 - 针对数据统计有额外的常数存储
 - 索引与数据分开存储: 
  
- .frm存储表结构
 - .MYD存储数据
 - .MYI存储索引
 
 
应用场景:只读应用或者以读为主的业务
4. Archive 引擎:用于数据存档
archive是归档 的意思,仅仅支持插入和查询两种功能 (行被插入后不能再修改)- 拥有很好的压缩机制,使用 
zlb压缩库,在记录请求的时候实时的进行压缩,经常被用来作为仓库使用 - ARCHIVE存储引擎采用了 
行级锁。该ARCHIVE引擎支持AUTO_INCREMENT列属性。AUTO_INCREMENT列可以具有唯一索引或非唯一索引。尝试在任何其他列上创建索引会导致错误 
适用场景:适合日志和数据采集(档案)类应用,适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度,但是对查询的支持较差
5. Blackhole 引擎: 丢弃写操作,读操作会返回空内容
- Blackhole引擎没有实现任何存储机制,它会 
丢弃所有插入的数据,不做任何保存 - 但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但这种应用方式会碰到很多问题,因此并不推荐
 
6. CSV引擎:存储数据时,以逗号分隔各个数据项
- CSV引擎可以将 
普通的CSV文件作为MySQL的表来处理,但不支持索引 - CSV引擎可以作为一种 
数据交换的机制,非常有用 - 对于数据的快速导入、导出是有明显优势的
 
7. Memory引擎:置于内存的表
Memory采用的逻辑介质是 内存,响应速度很快,但是当mysqld守护进程崩溃的时候 数据会丢失 。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)
- Memory同时 
支持哈希 (HASH) 索引和 B+树索引,默认使用哈希索引,也可指定为B+树索引类型 - MEMORY 
表的大小是受到限制的。表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size。其中,max_rows可以在创建表时指定; max_heap_table_size的大小默认为16MB可以按需要进行扩大 
一般不使用,而是使用redis
8. Federated引擎: 访问远程表
Federated引擎是访问其他MySQL服务器的一个 代理,尽管该引擎看起来提供了一种很好的 跨服务器的灵活性 ,但也经常带来问题,因此 默认是禁用的
9. Merge引擎: 管理多个MyISAM表构成的表集合
10. NDB引擎: MySQL集群专用存储引擎
也叫做 NDB Cluster 存储引擎,主要用于 MySQL cluster 分布式集群 环境,类似于 0racle 的 RAC 集群



















