文章目录
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 分布式集群
环境,类似于 Oracle 的 RAC 集群