1.存储引擎:深入解析 MySQL 存储引擎与 InnoDB 文件结构

MySQL 提供了多种存储引擎,适用于不同的业务场景。每种引擎在文件结构上设计独特,以便优化性能和功能。本文将详细介绍 MySQL 中常用存储引擎的文件结构,尤其是 InnoDB 引擎的多种文件类型及其作用,以帮助更深入地理解和选择适合的存储引擎。


一、MySQL 存储引擎概述与常用存储引擎对比

MySQL 支持多种存储引擎,每种引擎在文件结构和特性上各具特色。以下是几种常用存储引擎及其文件结构简述:

  1. InnoDB:支持事务的默认存储引擎,使用多种文件类型保证数据的安全性与一致性。
  2. MyISAM:传统的 MySQL 存储引擎,不支持事务,文件结构简单,适合读多写少的场景。
  3. Memory:将数据存储在内存中,访问速度极快,不生成数据文件。
  4. Archive:仅支持插入和高压缩,适用于历史数据存储。

二、InnoDB 存储引擎的文件结构详解

InnoDB 是 MySQL 默认存储引擎,文件结构复杂而严谨,通过多种文件确保事务一致性和崩溃恢复能力。以下是 InnoDB 的主要文件类型及其作用:

1. 表空间文件(.ibd 文件)

.ibd 文件是 InnoDB 中每个表的独立表空间文件,保存表数据和索引。

  • 作用:存储表的数据和索引。启用独立表空间(innodb_file_per_table=ON)后,每个表的 .ibd 文件会独立存储在对应数据库的目录下。
  • 结构:文件包含数据页和索引页,采用 B+ 树结构,确保快速数据访问。
  • 优点:独立的 .ibd 文件便于表的迁移和管理。
2. 系统表空间文件(ibdata 文件)

ibdata 文件是 InnoDB 的系统表空间,存储全局元数据和部分系统信息。

  • 作用:系统表空间保存 InnoDB 的全局数据字典、双写缓冲和部分撤销日志。
  • 结构ibdata 文件包含多个内部数据页,MySQL 启动时加载这些元数据。
  • 注意:即使启用了独立表空间,ibdata 文件依旧用于存储系统元数据,不能随意删除。
3. 重做日志文件(ib_logfile

ib_logfile 是 InnoDB 的事务日志文件,用于记录已提交事务的更改。

  • 作用:记录事务的修改操作,确保崩溃恢复的持久性。
  • 结构与机制:采用预写日志(WAL)机制,事务在写入磁盘前先写入重做日志。
  • 崩溃恢复:在系统崩溃后,ib_logfile 文件用于恢复至一致状态。
4. 撤销日志文件(Undo Tablespace)

撤销日志文件记录事务的反向操作,用于事务回滚和多版本并发控制(MVCC)。

  • 作用:支持事务回滚和 MVCC,实现数据的多版本访问。
  • 存储位置:默认情况下,撤销日志写入系统表空间,但也可以配置为独立文件。
  • 高并发支持:撤销日志减少了并发读写冲突,提高了 InnoDB 的事务处理效率。
5. 二进制日志文件(Binlog)

二进制日志文件是 MySQL 的全局日志,记录所有数据修改操作,用于恢复和主从同步。

  • 作用:记录数据修改的 SQL 语句,支持故障恢复和主从复制。
  • 格式:支持三种格式:STATEMENT(SQL 语句级)、ROW(行级)和 MIXED(混合模式)。
  • 持久化支持:对于 InnoDB,二进制日志是事务持久化的重要组成部分。

三、其他常用存储引擎的文件结构对比

InnoDB 虽然是 MySQL 默认引擎,但其他存储引擎在特定场景下也具备独特优势。以下是其他常用引擎的文件结构简析:

MyISAM 文件结构

MyISAM 是 MySQL 传统存储引擎,采用较为简单的文件结构。

  • 数据文件(.MYD:存储表的实际数据。
  • 索引文件(.MYI:存储表的索引。
  • 表定义文件(.frm:保存表的结构定义。

适用场景:MyISAM 不支持事务,但查询速度快,适合读多写少的场景,如统计分析和内容管理系统。

Memory 文件结构

Memory 存储引擎将数据存储在内存中,访问速度极快,但没有持久化支持。

  • 表定义文件(.frm:存储表的结构定义,数据本身存在内存中。

适用场景:适合用于缓存和会话数据等对速度要求高但数据安全性要求不高的场景。

Archive 文件结构

Archive 引擎支持高度压缩的数据存储,主要用于归档数据。

  • 数据文件(.ARZ:存储压缩的数据。
  • 表定义文件(.frm:保存表结构定义。

适用场景:适合用于日志归档、历史数据存储等需要大量写入但极少读取的场景。


四、MySQL 5.7 与 MySQL 8.0 在文件管理上的区别

MySQL 8.0 引入了 .sdi 文件来取代 .frm 文件的部分功能,文件管理更加标准化和兼容性更好。以下是 .frm.sdi 的区别:

文件类型缩写含义版本支持内容存储位置适用存储引擎
.frmFormMySQL 5.7 及之前表结构定义(字段、索引、约束等)数据库目录中MyISAM、InnoDB 等
.sdiSerialized Dictionary InformationMySQL 8.0 及之后JSON 格式的表结构定义包含在 .ibd 文件中所有存储引擎
.frm.sdi 的关键区别
  1. 格式差异.frm 文件采用专有格式,迁移时存在兼容性问题;.sdi 文件采用 JSON 格式,更具兼容性。
  2. 使用范围:MySQL 5.7 及之前版本使用 .frm 文件来存储表结构定义信息;MySQL 8.0 之后则使用 .sdi 文件。
  3. 管理位置.frm 文件独立存储在每个数据库目录中,而 .sdi 文件包含在表的 .ibd 文件中。

五、如何查看和修改表的存储引擎

MySQL 提供了查看和更改存储引擎的便捷命令:

查看表的存储引擎
SHOW TABLE STATUS LIKE 'table_name';
修改表的存储引擎
ALTER TABLE table_name ENGINE = InnoDB;
查看支持的存储引擎
SHOW ENGINES;

五、总结

不同存储引擎的文件结构设计,使得 MySQL 能够灵活应对多种业务需求。以下是选择存储引擎的常见依据:

  • 事务支持和数据一致性要求:选择 InnoDB。
  • 读多写少、查询性能要求高:选择 MyISAM。
  • 内存速度与数据持久性不敏感:选择 Memory。
  • 高效压缩存储、历史归档:选择 Archive。

理解 MySQL 不同存储引擎的文件结构和作用,将有助于优化数据库设计,提升系统的稳定性和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day01 - web开发简介

本课程涉及到的技术: Vue ElementUI/Html Js SpringBoot–Spring SpringMvc MyBatis(Plus) SSM Axios 学习路径: 前端主要: Html5css3JavaScript(JQuery)–>Vue(Node.js也可以学习一 下,服务端js)ElementUi(uni-app) 后端主要…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1)使用向日葵开机棒 缺点是比较贵一点,开机棒要一百多,而且查了评论发现挺多差评说不稳定,会有断联和无法唤醒的情况,而且设置也麻烦,还需要网卡支持WOL 2)使用远程开机卡 …

自攻螺钉的世纪演变:探索关键设计与应用

自攻螺钉作为现代工业和建筑中的不可或缺的标准部件,经过了超过100年的发展和创新。从1914年最早的铁螺钉设计到今天的自钻自攻螺钉,自攻螺钉的设计不断优化,以适应更复杂的应用需求。本文将回顾自攻螺钉的演变历程,分析其设计原理…

[复健计划][紫书]Chapter 7 暴力求解法

7.1 简单枚举 例7-1 Division uva725 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。枚举fghij,验证a…

OpenBayes 一周速览丨Ministral-8B革新侧端AI新体验!PsyDTCorpus心理咨询数据集上线,含5k个数字孪生对话数据

公共资源速递 This Weekly Snapshots ! 5 个数据集: * Labelme 图像标注数据集 * TIMIT 英语方言录音数据集 * Food-101 食品图像数据集 * SVHN 真实世界图像数据集 * PsyDTCorpus 心理咨询师数字孪生数据集 1 个模型: * Allegro 3…

如何修改网络ip地址:一步步指南‌

在当今这个数字化时代,网络已成为我们日常生活与工作中不可或缺的一部分。无论是浏览网页、在线办公还是享受流媒体服务,稳定的网络连接和适当的IP地址管理都是确保良好体验的关键。然而,出于隐私保护、绕过地理限制或测试网络环境等需要&…

论 ONLYOFFICE:开源办公套件的深度探索

公主请阅 引言第一部分:ONLYOFFICE 的历史背景1.1 开源软件的崛起1.2 ONLYOFFICE 的发展历程 第二部分:ONLYOFFICE 的核心功能2.1 文档处理2.2 电子表格2.3 演示文稿 第三部分:技术架构与兼容性3.1 技术架构3.2 兼容性 第四部分:部…

如何将现有VUE项目所有包更新到最新稳定版

更新有风险,Enter要谨慎!!! 要将项目中的所有 npm 包更新到最新稳定版,可以使用 npm-check-updates 工具。以下是具体步骤: 步骤一:安装 npm-check-updates 首先,全局安装 npm-check-updates 工具: npm install -g…

高德 阿里231滑块 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…

特征检测与特征匹配方法笔记+代码分享

在一幅图像中,总能发现其独特的像素点,这些点可以被视为该图像的特征,我们称之为特征点。在计算机视觉领域中,基于特征点的图像特征匹配是一项至关重要的任务,因此,如何定义并识别一幅图像中的特征点显得尤…

【陕西】《陕西省省级政务信息化项目投资编制指南(建设类)(试行)》-省市费用标准解读系列07

《陕西省省级政务信息化项目投资编制指南(建设类)(试行)》规定了建设类项目的费用投资测算方法与计价标准,明确指出建设类项目费用包括项目建设费和项目建设其他费(了解更多可直接关注咨询我们)…

无人机干扰与抗干扰,无人机与反制设备的矛与盾

无人机干扰与抗干扰,以及无人机与反制设备之间的关系,可以形象地比喻为矛与盾的较量。以下是对这两方面的详细探讨: 一、无人机干扰与抗干扰 1. 无人机干扰技术 无人机干扰技术是指通过各种手段对无人机系统进行干扰,使其失去正…

Github配置ssh key原理及操作步骤

文章目录 配置SSH第一步:检查本地主机是否已经存在ssh key第二步:生成ssh key第三步:获取ssh key公钥内容第四步:Github账号上添加公钥第五步:验证是否设置成功验证原理 往github上push项目的时候,如果走ht…

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间,比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的,用的好与不好会给我们的业务甚至功能带来很大的影响。所以…

【Ant.designpro】上传图片

文章目录 一、前端二、后端 一、前端 fieldProps:可以监听并且获取到组件输入的内容 action{“/api/upload_image”} 直接调用后端接口 <ProFormUploadButtonlabel{"上传手续图片"}name{"imgs"}action{"/api/upload_image"}max{5} fieldPro…

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

Qt中的Model与View 4:QStandardItemModel与QTableView

目录 QStandardItemModel API QTableView 导航 视觉外观 坐标系统 API 样例&#xff1a;解析一个表格txt文件 QStandardItemModel QStandardItemModel 可用作标准 Qt 数据类型的存储库。它是模型/视图类之一&#xff0c;是 Qt 模型/视图框架的一部分。它提供了一种基于…

web——sqliabs靶场——第一关

今天开始搞这个靶场&#xff0c;从小白开始一点点学习,加油&#xff01;&#xff01;&#xff01;&#xff01; 1.搭建靶场 注意点&#xff1a;1.php的版本问题&#xff0c;要用老版本 2.小p要先改数据库的密码&#xff0c;否则一直显示链接不上数据库 2.第一道题&#xff0…

Markdown快速上手(typora)

一级标题~六级标题 可以选中文本在这里直接设置&#xff0c;后面也有快捷键&#xff0c;也可以使用其语法&#xff0c;一个#&#xff0c;对应一级标题&#xff0c;两个#&#xff0c;对应二级标题&#xff0c;等。 我这里使用Ctrl1没生效是因为快捷键冲突&#xff0c;也需要注意…