MySql教程

MySQL之存储引擎

本文主要是介绍MySQL之存储引擎,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MySQL之存储引擎

一、简介

​ MySQL支持的存储引擎有好几种,如Memory/InnoDB/MyISAM/CSV/ARCHIVE等。通过show engines命令可以查看MySQL所支持的存储引擎。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTPJhnXx-1645604415159)(C:\Users\zero\AppData\Roaming\Typora\typora-user-images\image-20220223152241771.png)]

​ 从3.23.34a版本开始就包含InnoDB存储引擎,更是在5.5之后的版本默认采用InnoDB引擎。InnoDB是MySQL的默认事务型存储引擎,被设计用来处理大量的短期(short-live)事务。可以确保事务的完成提交(Commit)和回滚(Rollback)。

二、分析

​ 下面就每种存储引擎的使用场景及优缺点做简单的介绍说明:

1、InnoDB引擎

​ InnoDB存储引擎是MySQL默认的事务型引擎,在平时的业务开发中,没有特殊的需求外,默认也是使用InnoDB引擎。InnoDB引擎底层的数据文件结构分为两部分:

  • 表名.frm:存储表结构
  • 表名.ibd:存储数据及索引

在之前的版本中,字典数据以元数据文件、非事务表等来存储。8.0版本之后,这些元数据文件被删掉了,如.frm,.par,.trn,.isl,.db.opt等。

​ 在开发中,除了新增和查询外,还需要更新、删除操作,应该优先选择InnoDB引擎,InnoDB是为处理巨大数据量的最大性能设计的。采用B+Tree的数据结构存储,在叶子节点上既有数据也存了索引,因此会占用更多的磁盘空间来保存数据和索引。

2、MyISAM引擎

​ MyISAM存储引擎提供了大量的特性,包括全文索引,压缩、空间函数等,但MyISAM不支持事务、行级锁、外键,并且有一个很大缺陷就是崩溃后无法安全恢复。MySQL在5.5版本之前的默认存储引擎就是MyISAM。MyISAM引擎底层的数据文件结构分为三部分:

  • 表名.frm:存储表结构

  • 表名.MYD:存储数据

  • 表名.MYI:存储索引

​ MyISAM只缓存索引,不缓存真实数据,因此MyISAM的访问速度快,如果是对事务完整性没有要求或以select、insert为主的应用,可以考虑使用MyISAM存储引擎。

3、Archive引擎

​ Archive引擎是用于数据存档,其特征及功能支持如下:

特征支持
B树索引不支持
备份/时间点恢复 (在服务器中实现,而不是在存储引擎中)支持
集群数据库支持不支持
聚集索引不支持
压缩数据支持
数据缓存不支持
加密数据(加密功能在服务器中实现)支持
外键支持不支持
全文检索索引不支持
地理空间数据类型支持支持
地理空间索引支持不支持
哈希索引不支持
索引缓存不支持
锁粒度行锁
MVCC不支持
存储限制没有任何限制
交易不支持
更新数据字典的统计信息支持

4、Blockhole引擎

​ 丢失写操作,读操作会返回空内容。

5、CSV引擎

​ 存储数据是,以逗号分隔各个数据项,这种格式的数据也可以用excel打开。

6、Memory引擎

​ 基于内存的实现的引擎。主要的特征就是响应速度快,但是当MySQL服务崩溃时会有造成数据丢失。另外,要求存储的数据是数据长度不变的格式,像Blob和Text类型的数据是不可用的。主要特征如下:

  • Memory同时 支持哈希(HASH)索引 和 B+树索引 。
  • Memory表至少比MyISAM表要 快一个数量级 。
  • Memory 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rows 和 max_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默 认为16MB,可以按需要进行扩容。
  • 数据文件与索引文件分开存储。

​ Memory适用的场景如目标数据比较小且访问频繁\数据是临时的\丢失数据不影响业务逻辑等场景都可以使用Memory引擎。

7、Federate引擎

​ Federated引擎是访问其他MySQL服务器的一个 代理 ,尽管该引擎看起来提供了一种很好的 跨服务 器的灵活性 ,但也经常带来问题,因此 默认是禁用的 。

8、Merge引擎

​ 管理多个MyISAM表构成的集合。

9、NDB引擎

​ MySQL集群专用存储引擎,也叫NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群 环境,类似于 Oracle 的 RAC 集 群。

三、对比

特 点MyISAMInnoDBMEMORYMERGENDB
存 储 限 制64TB没有
事 务安 全/支持///
锁 机 制表锁,即使操作一条 记录也会锁住整个 表,不适合高并发的 操作行锁,操作时只锁某一行,不 对其它行有影响,适合高并发 的操作表锁表锁行 锁
B树 索 引支持支持支持支持支持
哈 希 索 引//支持/支持
全 文 索 引支持////
集 群 索 引/支持///
数 据 缓 存/支持支持/支持
索 引缓 存只缓存索引,不缓存 真实数据不仅缓存索引还要缓存真实数 据,对内存要求较高,而且内 存大小对性能有决定性的影响支持支持支持
数 据 可 压 缩支持////
空 间 使 用/
内 存 使 用中等
批 量 插 入 的 速 度
支 持外 键/支持///

四、InnoDB和MyISAM如何选择?

MySQL5.5之前默认的存储引擎是MyISAM,5.5之后改为InnoDB。两者对比如下:

对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一行数据也会所著整张表,不适合高并发操作行锁,操作时只锁住某一行数据,不影响其他数据,适合高并发操作
缓存只缓存索引,不缓存数据不仅缓存索引还要缓存真实数据,堆内存要求较高,而且内存大小对性能有决定性影响
自带系统表使用
关注点性能:节省资源、消耗少、简单业务事务:并发写、事务、更大资源
默认安装
默认使用
这篇关于MySQL之存储引擎的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!