MySQL的InnoDB引擎原来是这样的

大家都知道,对于面试官来说,没有办法能够很直接的能问到面试者对于SQL的理解,所以就会有很多千奇百怪的问题就出现了,比如 SQL 优化,索引创建原则,索引的最左匹配原则,唯一索引,联合索引,甚至就开始询问关于 MySQL 的存储引擎了。

MYSQL 的存储引擎

首先我们得先知道存储引擎是什么,

百度百科是这么解释的:

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

阿粉不知道最近很火的 ChatGTP 是如何解释这个存储引擎的,但是在阿粉看来,他就是 MySQL将数据存储在文件系统中的存储方式或者存储格式

又或者说,存储引擎就是存储数据,建立索引,更新查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。

也就是说,在一个数据库中的多个表可以有不同的存储引擎,这样面试官再问的时候,可别说不可以。

既然我们知道了 MYSQL 的存储引擎是什么了,那么就得来说说他的分类了。

MYSQL 存储引擎分类:

  • InnoDB、
  • MyISAM、
  • MEMORY、
  • CSV、
  • BLACKHOLE、
  • FEDERATED、
  • MRG_MYISAM、
  • ARCHIVE、
  • PERFORMANCE_SCHEMA。

这么一看的话,MYSQL 的存储引擎那分类也是很多样的,这样阿粉接下来就详细的拆开,一个一个的说说他的存储引擎,只讲用的比较多的,其他的只做简单了解就OK了,比较,如果要是你能和面试官就一两个存储引擎聊的非常透彻的话,那么相信你也入职也没啥问题。

InnoDB 存储引擎

首先第一点,mysql5.6 以上默认存储方式就是使用的 InnoDB存储引擎,而 InnoDB 存储引擎的各方面的优点也是非常多的,例如:

用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性, 数据操作除了插入和查询之外,还包括很多更新和删除操作,那么 InnoDB 存储引擎是比较合适的。

InnoDB 除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚, 对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。

InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。

我们也是可以通过 SQL 来查询当前数据库默认的存储引擎的,SQL 语句如下:

show variables like'%engine%';

上述语句是查询默认使用的存储引擎,而查询当前 MYSQL 支持的存储引擎则是使用下面的语句:

show engines;

既然我们已经都知道了关于这个 InnoDB 的相关特点了,那么接下来我们还得来看看这个关于 InnoDB 存储引擎的磁盘结构。

InnoDB磁盘主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log 和Undo Logs。

Tablespaces:system表空间是InnoDB数据字典、doublewrite缓冲区、change缓冲区和undo日志的存储区域。如果表是在系统表空间中创建的,而不是在每个表的文件或一般表空间中创建的话,它还可以包含表和索引数据。

InnoDB Data Dictionary:InnoDB数据字典由内部系统表组成,其中包含用于跟踪表、索引和表列等对象的元数据。元数据物理上位于InnoDB系统表空间中。由于历史原因,数据字典元数据与InnoDB表元数据文件(.frm文件)中的信息存在一定程度的重叠。

Doublewrite Buffer:doublewrite缓冲区是一个存储区域,InnoDB在将页面写到InnoDB数据文件中的适当位置之前,在这个存储区域中写入从缓冲池中刷新的页面。如果在页写过程中出现了操作系统、存储子系统或意外的mysqld进程退出,InnoDB可以在崩溃恢复期间从doublewrite缓冲区中找到一个好的页副本。

Redo Log:重做日志是一种基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据。在正常操作过程中,重做日志对SQL语句或低级API调用产生的表数据更改请求进行编码。在意外关闭之前未完成数据文件更新的修改将在初始化期间和接受连接之前自动重播。有关重做日志在崩溃恢复中的角色的信息。

Undo Logs:撤消日志是与单个读写事务相关联的撤消日志记录的集合。撤销日志记录包含关于如何撤销事务对聚集索引记录的最新更改的信息。如果另一个事务需要将原始数据作为一致读操作的一部分来查看,则从撤消日志记录中检索未修改的数据。Undo日志存在于Undo日志段中,包含在回滚段中。回滚段位于系统表空间、undo表空间和临时表空间中。

下面是阿粉找的硬盘结构图:

关于 InnoDB 引擎,其实我们最主要掌握的就是他的一系列的特点,下面则是他的优点:

它的DML操作遵循ACID(atomicity原子,consistency一致,isolation隔离,durability持久)模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。

并发性能好:行级锁定和oracle风格的一致读取可以提高多用户并发性和性能。

查询性能好:InnoDB表在磁盘上排列数据,以优化基于主键的查询。每个InnoDB表都有一个主键索引,称为聚集索引,用于组织数据以最小化主键查找的I/O。

业务性能好:为了保持数据的完整性,InnoDB支持外键约束。使用外键,插入、更新和删除将被检查,以确保它们不会导致相关表之间的不一致。有些生产环境不使用外键,以业务代码维护表数据间关系。

一般对于 InnoDB 掌握这些差不多也算是能应对面试官的提问了,今天阿粉就先讲到这里,之后继续讲解关于 MySQL 的其他的存储引擎。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/298729.html<

(0)
管理的头像管理
上一篇2025-05-23 01:59
下一篇 2025-05-23 02:00

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注