1、存储引擎简介
存储引擎是什么:
为了管理方便,把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的肺功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引功能。所以在MySQL server完成了查询优化后,只需要按照生成的执行计划,调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。
简而言之,存储引擎就是指表的类型。它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或者写入操作。
存储引擎就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。
存储引擎是负责对表中数据进行提取和写入工作的,在MySql中,我们可以为不同的表设置不同的存储引擎,也就是说,不同的表可以有不同的物理存储结构和不同的提取和写入方式。
2、MySql中存储引擎介绍
2.1 InnoDB:具备外键支持功能的事务存储引擎
InnoDB:具备外键支持功能的事务存储引擎。
- MySQL在5.5版本之后,默认采用InnoDB存储引擎。
- InnoDB是MySQL的默认事务型引擎,它被涉及用来处理大量短期事务,可以确保事务的完整提交和回滚。
- 除了新增和查询之外,如果需要更新、删除操作,那么应该优先考虑InnoDB存储引擎。
- 除非有特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB存储引擎。
- InnoDB的数据文件结构:
表名.frm文件,用来存储表结构(在MySQL8.0时,合并在 表名.ibd 中)
表名.ibd文件,用来存储数据和引擎。
- InnoDB是为处理巨大数据量的最大性能设计。
InnoDB不尽缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性影响;而MyISAM只缓存索引,不缓存真实数据。
2.2 MyISAM:主要的非事务处理存储引擎
MyISAM:主要的非事务处理存储引擎。
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数等,但是不支持事务,也不支持行级锁和外键,有一个毫无疑问的缺陷:崩溃后无法安全恢复。
- 是5.5版本之前的默认存储引擎。
- 优势是访问速度快,对事物完整性没有要求,或者以select、insert为主的应用。
- 针对数据统计有额外的常数存储,所以count(*)查询效率很高。
- 数据文件结构:
表名.
frm文件,用来存储表结构
表名.MYD文件,用来存储数据
表名.MYI文件,用来存储索引
- 应用场景:只读应用或者以读为主的业务。
2.3 Archive:用于数据存档
用于数据存档,具体不做赘述。
2.4 Blackhole:丢弃写操作,读操作会返回空内容
丢弃写操作,读操作会返回空内容。有点奇怪,不做赘述。
2.5 CSV:存储数据时,以逗号分隔各个数据项
存储数据时,以逗号分隔各个数据项。这种格式可以被excel等电子表格读取甚至写入。不做赘述。
2.6 Memory:置于内存的表
Memory引擎采用的逻辑介质是内存,响应速度很快,但是当mysqld守护进程崩溃的时候,数据会丢失。