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守护进程崩溃的时候,数据会丢失。

2.7 Federated:访问远程表

2.8 Merge:管理多个MyISAM表构成的表集合

2.9 NDB:用于MySQL分布式集群环境

3、 InnoDB和MyISAM对比

image.png