MySQL之存储引擎大全 -《从0到1-全面深刻理解MySQL系列-第五篇》

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL之存储引擎大全 -《从0到1-全面深刻理解MySQL系列-第五篇》

image.png

文章大纲

一、前言

二: MySQL支持的存储引擎

三: MySQL支持的存储引擎的特点

四: 如何选择一个存储引擎,常用的存储引擎特点对比

五: 关于存储引擎常见的面试题

5.1: InnoDB和MyISAM的区别

5.2: 如何选择Mysql的存储引擎

六、系列文章

七、小结

image.png

一、前言

大家好,我是小诚,从上一篇《一条SQL执行的完整流程解析》介绍了MySQL的执行流程,我们知道了MySQL服务端又划分为:MySQL Server层和存储引擎层。本篇内容主要是介绍MySQL8.x支持的存储引擎及其特点,让大家进一步熟悉MySQL


最近时常会收到一些小伙伴反馈的问题,为了方便交流,所以创建了交流群,感兴趣的可以添加,欢迎大家一起交流,吹水,摸鱼,进步。


《从0到1-全面深刻理解MySQL系列》系列文章会持续更新,感兴趣的小伙伴可以关注我,一起加油,一起进步!,如有帮助,不要忘记一键三联哦,ღ( ´・ᴗ・` )比心!

image.png

二: MySQL支持的存储引擎

  存储引擎主要负责的是对数据的存取进行相应的操作,通过MySQL官方文档可知MySQL8.0支持10种类型存储引擎,具体如下:

image.png

image.png

三: MySQL支持的存储引擎的特点


 (一)、InnoDB:


 是Mysql8.0中默认的存储引擎。InnoDB是 MySQL 的事务安全(符合 ACID)存储引擎,具有提交、回滚和崩溃恢复功能来保护用户数据。


 InnoDB行级锁定(不升级为更粗粒度的锁定)和 Oracle 风格的一致非锁定读取提高了多用户并发性和性能。


 InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的 I/O。为了维护数据完整性, InnoDB还支持FOREIGN KEY引用完整性约束。



 (二) 、MyISAM


 使用这种存储引擎的表占用的空间很小,表级别的锁(表锁)限制了它的读/写负载的性能,它通常用于 Web 和数据仓库配置中的只读或以读取为主的工作场景中。



 (三) 、Memory


 这种存储引擎将所有的数据都存储在内存中,以便在非关键数据的环境中需要快速查找场景中进行快速访问,这个存储引擎在之前也被称为HEAP引擎。



 这种引擎的使用正在逐渐减少,因为在InnoDB引擎中通过缓冲池内存区提供了一种通用且持久的方式来将大部分或者所有数据保存在内存中,且NDB引擎(也叫NDBCLUSTER)提高了为庞大的分布式数据集提供快速的键值查找。



 (四) 、CSV


 CSV引擎的表格其实是具有逗号分隔值的文本文件。CSV引擎中的表允许您以 CSV 格式导入或转储数据以便与读写相同格式的脚本和应用程序交换数据。



 由于 CSV 表没有索引,因此您通常可以让InnoDB引擎在正常操作期间将数据保存在表中,并且仅在导入或导出阶段使用 CSV 引擎的表。



 (五) 、Archive


 这种存储引擎下表是紧凑的、没有索引的,主要用于于存储和检索大量很少引用的历史、存档或安全审计信息。



 (六) 、Blackhole


 Blackhole 存储引擎接收但不存储数据,与 Unix/dev/null设备类似。查询总是返回一个空集。这种引擎模式下的表可用于配置复制,其中 DML 语句被发送到副本服务器,但源服务器不保留自己的数据副本。



 (七) 、NDB(也叫作NDBCLUSTER)


 这种集群数据库引擎特别适用于要求正常运行时间高程度保障的和高可用性的应用程序。



 (八) 、Merge


  这种存储引擎可以让MySQL DBA 或开发人员能够对一系列相同的MyISAM表进行逻辑分组并将它们作为一个对象引用。适用于 VLDB 环境,例如数据仓库。



 (九) 、Federated


  这种存储引擎提供了链接单独的MySQL服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合分布式或数据集市环境。



 (十) 、Example


 这个引擎作为 MySQL 源代码中的一个例子,描述了如何开始编写新的存储引擎。它可能是开发人员感兴趣的。存储引擎是一个什么都不做的 “存根”。您可以指定表使用这种存储引擎,但不能在其中存储或从中检索数据。



 (十一) 、小结


 您不需要对整个服务器或架构限制使用相同的存储引擎。您可以为任何表指定特定的存储引擎。例如,一个应用程序中的表可能主要使用InnoDB类型,然后定义一个CSV引擎的表用于将数据导出到电子表格,而另外定义一些 MEMORY引擎类型的表用于临时工作区,简单来说,就是可以根据自己的需求灵活定义表的存储引擎。

image.png

四: 如何选择一个存储引擎,常用的存储引擎特点对比


  通过上文我们Mysql有哪些存储引擎,下面就来讲解一下常用的存储引擎的特点:

image.png

image.png

选择一个表的存储引擎时,大家可以参考上面各个存储引擎特点然后根据自己的具体业务场景去选择,一般的业务场景使用MySQL官方默认的即可,下面我主要总结一些一些需要注意的细节(主要用于面试)。


 1、各个引擎的Replication support是在服务器程序中实现,而不是在存储引擎中。


 2、各个引擎的Encrypted data(数据加密)是在服务器中实现。


 3、在 MySQL 5.7 及更高版本中,支持静态数据加密,都是在服务器中实现的。


 4、MySQL Cluster NDB 7.3 及更高版本支持外键。


 5、MySQL 5.6 及更高版本支持 FULLTEXT 索引。


 6、MySQL 5.7 及更高版本支持地理空间索引。


 7、InnoDB存储引擎在内部利用哈希索引来实现其自适应哈希索引功能。


image.png

五: 关于存储引擎常见的面试题


5.1: InnoDB和MyISAM的区别


 (一) InnoDB的特点:



 1、支持事务处理、ACID事务特性,是MySQL也是MySQL默认的存储引擎(MySQL5.5以前默认存储引擎是MyISAM);;



 2、实现了SQL标准的四种隔离级别;



 3、支持行级锁和外键约束;



 4、可以利用事务日志进行数据恢复。



 5、锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大。



 6、索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。



 (二) MyISAM的特点:



 1、锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。



 2、此引擎不支持事务,也不支持外键。



 3、INSERT和UPDATE操作需要锁定整个表;



 3、它存储表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。



 (三) 适用场景



 MyISAM适合: (1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。



 InnoDB适合: (1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。



5.2: 如何选择Mysql的存储引擎


 具体需要根据系统的业务要求选择,一般情况下使用官方默认的即可。



 InnoDB: 如果对数据的完整性要求比较高,且除了插入和查询外,还存在着许多更新和删除操作的,需要使用到事务或者外键的,适用于选择InnoDB,InnoDB也是Mysql现在默认的存储引擎。



 MyISAM: 以只读或者插入操作为主,很少的更新和删除操作的,并且对数据完整性要求不高的可以选择。



六、系列文章


 《从0到1-全面深刻理解MySQL系列》所有文章汇总



 1、《从0到1-全面深刻理解MySQL系列》- 最详细的MySQL安装流程(Window版)



 2、《从0到1-全面深刻理解MySQL系列》- 最详细的MySQL安装流程(Linux环境)



 3、《从0到1-全面深刻理解MySQL系列》- 忘记MySQL登录密码时如何连接数据库



七、小结


 从上文我们可以知道,MySQL官方有提供10之多的存储引擎,并且各有特点,在进行数据库、表设计的时候,就要比较全面的考虑自己系统的一个业务场景来确定使用哪一种存储引擎,如果不知道如何选择的情况下,直接使用官方默认的即可,既然官方默认了这种存储引擎,说明这是官方在进行大量的试验和考量后从支持的存储引擎中选出适用于大多数系统使用场景的一个,所以不必太过担心。



  最后、如果觉得文章对你有帮助,不要忘记一键三连哦,你的支持是我创作更加优质文章的动力,有任何问题可以私信我,看到会及时给你答复!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
MySQL存储引擎
|
8天前
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
8天前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的Memory存储引擎
MySQL 的存储引擎层负责数据的存储和提取,支持多种存储引擎,如 InnoDB、MyISAM 和 Memory。InnoDB 是最常用的存储引擎,从 MySQL 5.5.5 版本起成为默认引擎。Memory 存储引擎的数据仅存在于内存中,重启后数据会丢失。示例中创建了使用 Memory 引擎的 test3 表,并展示了数据在重启后消失的过程。
|
1月前
|
存储 SQL 缓存
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
|
2月前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
54 0
|
5月前
|
存储 关系型数据库 MySQL
|
4月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
173 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)