ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL之存储引擎

2022-02-23 16:33:40  阅读:225  来源: 互联网

标签:存储 支持 索引 引擎 InnoDB MyISAM 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
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一行数据也会所著整张表,不适合高并发操作行锁,操作时只锁住某一行数据,不影响其他数据,适合高并发操作
缓存只缓存索引,不缓存数据不仅缓存索引还要缓存真实数据,堆内存要求较高,而且内存大小对性能有决定性影响
自带系统表使用
关注点性能:节省资源、消耗少、简单业务事务:并发写、事务、更大资源
默认安装
默认使用

标签:存储,支持,索引,引擎,InnoDB,MyISAM,MySQL
来源: https://blog.csdn.net/lissic_blog/article/details/123093095

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有