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

IT学习日记 IT学习日记     2022-12-09     252

关键词:


  • 个人主页: IT学习日记
  • 版权: 本文由【IT学习日记】原创、在CSDN首发
  • 公众号:【IT学习日记】一个只搞干货的公众号
  • 如果文章对你有帮助欢迎关注、点赞、收藏(一键三连)有任何问题欢迎私信,看到会及时回复!

一: 前言

一、前言

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

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

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

面对疾风吧


二: MySQL支持的存储引擎及特点

二: MySQL支持的存储引擎


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

mysql8.0支持的存储引擎类型


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

三: 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引擎类型的表用于临时工作区,简单来说,就是可以根据自己的需求灵活定义表的存储引擎


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

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


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

常用的存储引擎特点对比

  选择一个表的存储引擎时,大家可以参考上面各个存储引擎特点然后根据自己的具体业务场景去选择,一般的业务场景使用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存储引擎在内部利用哈希索引来实现其自适应哈希索引功能。



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

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


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

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


在这里插入图片描述

《从0到1-全面深刻理解mysql系列》-忘记mysql登录密码时如何连接数据库(代码片段)

...一:前言大家好,我是小诚,之前说到,最近在准备《从0到1-全面深刻理解MySQL系列》文章,前两天已经将Windo 查看详情

《从0到1-全面深刻理解mysql系列》-最详细的mysql安装流程(linux环境)(代码片段)

个人主页:IT学习日记版权:本文由【IT学习日记】原创、在CSDN首发公众号:【IT学习日记】一个只搞干货的公众号如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)、有任何问题欢迎私信,看到会及时回复!文章大纲1、删除旧版... 查看详情

《从0到1-全面深刻理解mysql系列》-最详细的mysql安装流程(window版)(代码片段)

个人主页:IT学习日记版权:本文由【IT学习日记】原创、在CSDN首发如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)、有任何问题欢迎私信,看到会及时回复!文章大纲下载前需要了解的一些概念选择自己需要的版本连接MySQL... 查看详情

舔狗的故事-mysql客户端与服务端的爱恨情仇-《从0到1-全面深刻理解mysql系列-第六篇》

💂个人主页:IT学习日记🤟版权:本文由【IT学习日记】原创、在CSDN首发👥公众号:【IT学习日记】一个只搞干货的公众号💬如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)、有任何问题欢迎私信,看到会及... 查看详情

mysql性能优化:从逻辑分层存储引擎到解析过程(代码片段)

1.为什么要进行sql优化因为没有进行sql优化的语句执行性能低下。而性能低下的原因:sql语句欠佳,索引失效,服务器参数设置不合理(缓冲、线程数)本文整个优化过程主要是围绕索引进行2.Mysql安装启动配置(CentO... 查看详情

Mysql'从存储引擎得到错误-1'错误

】Mysql\\\'从存储引擎得到错误-1\\\'错误【英文标题】:Mysql\'Goterror-1fromstorageengine\'errorMysql\'从存储引擎得到错误-1\'错误【发布时间】:2012-03-2415:34:13【问题描述】:我有一个myism表“测试”,其中包含一些过时的数据,现在我想... 查看详情

mysql进阶篇之mysql存储引擎

本次学校MySQL的存储引擎,主要包括InnoDB,MyISAM,Memory三种,下面一起来学习吧,很简单,主要涉及一个面试题,哈哈。目录1.MySQL体系结构2.存储引擎简介3.存储引擎特点4.存储引擎选择5.小结1.MySQL体系... 查看详情

mysql进阶之存储引擎

1、概念存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方法。其基于表的,而不是基于库的,所以存储引擎也称为表类型。在建表的时候,不指定存储引擎,默认的存储引擎是InnoDB。查看建表语句:showcreatetable... 查看详情

mysql之数据库存储引擎及事务acid特性

1、存储引擎2、事务3、事务语法4、事务简单原理 查看详情

mysql分表查询之merge存储引擎实现

...)?在这篇文章里,介绍使用 Merge [mɜːrdʒ] 存储引擎实现 MySQL [maɪeskju:el]分表查询。MERGE 查看详情

unity零基础到入门☀️|游戏引擎unity从0到1的系统学习路线全面总结-建议收藏!

...UI系统学习Unity中的动画系统和导航系统学习Unity中的数据存储学习Shader学习💚第四阶段:项目架构学习和实战练习Unity常用框架学习Unity热更新学习Unity中的AssetBundle学习游戏项目实战💙第五阶段:Unity高级图形学&... 查看详情

unity零基础到入门☀️|游戏引擎unity从0到1的系统学习路线全面总结-建议收藏!

...UI系统学习Unity中的动画系统和导航系统学习Unity中的数据存储学习Shader学习💚第四阶段:项目架构学习和实战练习Unity常用框架学习Unity热更新学习Unity中的AssetBundle学习游戏项目实战💙第五阶段:Unity高级图形学&... 查看详情

mysql之innodb存储引擎(代码片段)

innodb存储引擎一、mysql组织架构根据以上结构,详解如下1、连接层1.验证用户的身份,用户名密码是否匹配2.提供两种连接方式(TCP/IP连接、socket连接)3.连接层提供了一个与sql层交互的线程2、SQL层1.接收连接层传... 查看详情

从0到1搭建大数据平台之数据存储

...攻克。今天想和小伙伴们,聊一聊大数据平台之数据存储,希望大家喜欢。一、前言我们都知道,采集数据之后&#x 查看详情

从0到1搭建大数据平台之数据存储

...攻克。今天想和小伙伴们,聊一聊大数据平台之数据存储,希望大家喜欢。一、前言我们都知道,采集数据之后&#x 查看详情

大白话系列mysql学习总结之初步了解mysqlserver的binlog组件(代码片段)

...才算事务提交成功。但是我们都知道,redologbuffer是InnoDB存储引擎的组件,而MySQL支持很多种存储引擎,那么MySQL在撇除存储引擎后,自己就没有记录一下关于数据更新的日志吗?二、binlog日志文件redolog本身是InnoDB存储引擎特有的... 查看详情

mysql教程详解之存储引擎介绍及默认引擎设置

什么是存储引擎?与其他数据库例如Oracle和SQLServer等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“PluggableStorageEngineArchitecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户可... 查看详情

从0到1:全面理解rpc远程调用

参考技术A作者|Python编程时光责编|胡巍巍什么是RPC呢?百度百科给出的解释是这样的:“RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议”... 查看详情