【MySQL】存储引擎 - InnoDB详解

【MySQL】存储引擎 - InnoDB详解
📢博客主页:https://blog.ZEEKLOG.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 ZEEKLOG🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

文章目录


InnoDB是一款兼顾高可靠性和高性能的通用存储引擎。在MySQL8.0中默认的存储引擎是 InnoDB

使用 CREATE TABLE 语句创建表时,在没有修改默认存储引擎或明确指定其他存储引擎时,将创建一个 InnoDB 的表。

🏳️‍🌈一、InnoDB存储引擎的特性

在这里插入图片描述

🏳️‍🌈二、|nnoDB 的主要优势

  1. DML操作遵循ACID模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。事务和锁专题中介绍
  2. 如果发生意外而崩溃,无论当时数据库发生了什么,都不需要在重启数据库后执行任何特殊操作。InnoDB 的崩溃恢复功能会自动完成崩溃之前提交的更改,并撤消崩溃前正在进行但未提交的更改,从而允许我们从中断的地方继续执行。备份与恢复专题介绍
  3. 支持行级锁,提高了多用户的读取并发性和性能。事务和锁专题中介绍
  4. InnoDB 存储引擎维护了一个自己的缓冲池,访问数据时在内存中缓存表和索引数据,对于经常使用的数据直接从内存中处理,大幅提升了效率。在专用数据库服务器上,通常会将高达 80%的物理内存分配给缓冲池。
  5. InnoDB表优化了基于主键的查询,每个InnoDB表都有一个称为聚簇索引的主键索引,实现通过最少的磁盘I/0完成对主键的查找。索引专题中介绍
  6. 为了保持数据完整性,InnoDB 支持 FOREIGN KEY(外键)约束。在进行插入、更新和删除数据时确保相关表之间的一致性
  7. 从表中反复查询相同的行时,自适应哈希索引会自动接管这些查询,此时查询效率和哈希表相同。

🏳️‍🌈三、InnoDB表的最佳实践

如何利用 InnoDB 的特性实现最佳的性能
  1. 为表中最频率查询的列(或多个列)指定主键(或复合主键),如果没有明显的主键,则创建一个自增的列做为主键。
  2. 从多个表中根据相同的ID查询数据,建议使用表连接。可以在连接的列上定义外键,并在每个表中使用相同的数据类型声明这些列。添加外键可以确保被引用的列使用索引,从而提高性能。
  3. 在每秒提交数百次事务的服务器上,结合存储设备的写入速度,关闭事务的自动提交,通过系统变量 autocommit=0FF 设置。
  4. 把相关的DML操作用 START TRANSACTION 和 COMMIT 语句括在一起,分组为事务一起提交或回滚。
  5. 不要使用 LOCK TABLES 语句,InnoDB可以在不牺牲可靠性和高性能的情况下处理多个会话同时对一个表进行读写操作。

🏳️‍🌈四、验证InnoDB是否为默认存储引擎

执行 SHOW ENGINES 语句查看可用的存储引擎时,查找 SUPPORT 列的值为 DEFAULT 的行
在这里插入图片描述
使用 SELECT * FROM INFORMATION_SCHEMA.ENGINES \G 查看当前 MySQL 服务器支持的存储引擎及其详细信息的命令INFORMATION_SCHEMAMySQL 内置的系统数据库,存储了数据库、表、列等元数据信息。ENGINES 是该数据库中的一张表,记录了 MySQL 服务器支持的所有存储引擎的详细信息。
在这里插入图片描述
如果InnoDB不是默认的存储引擎,可以通过在命令⾏指定选项 --default-storageengine=InnoDB
或者在选项⽂件的 [mysqld] 节点定义 default-storageengine=InnoDB重新启动服务器来设置 InnoDB 存储引擎
在这里插入图片描述
由于业务实际需要,服务器默认存储引擎不是InnoDB时想要创建一个InnoDB表,可以在使用 CREATE TABLE 语句创建表时明确指定 InnoDB 存储引擎,当然这样方式也可以指定其他任何支持的存储引擎
CREATE TABLE table_name ( ... 定义字段 ) ENGINE = InnoDB; # 指定存储引擎 
如果想测试使用其他存储引擎表中的数据在InnoDB表中的工作情况,在确保不影响原始表的情况下,使用以下方式创建一张InnoDB表
CREATE TABLE ... ENGINE=InnoDB AS SELECT * FROM other_engine_table; 

🏳️‍🌈五、创建InnoDB表

# 选择⽬标数据库 use test_db # 创建⼀个使⽤InnoDB存储引擎的表 CREATE TABLE t_innodb ( id int(11) PRIMARY KEY AUTO_INCREMENT, name varchar(20) ) ENGINE = InnoDB; 

当创建一个存储引擎为 InnoDb 的表时,会在 data_dir/test_db 目录下生成一个用来存储真实数据的物理文件,命名格式为表名.ibd

以当前为例会在 /var/lib/mysql/test_db 目录下生成一个 t_innodb.ibd 的表空间数据文件

在这里插入图片描述
表空间文件 t_innodb.ibd 用来存储表中的数据
  • 在MySQL8.0中表结构的信息也保存在.ibd 文件中,可以使用 ibd2sdi 工具提取表定义的具体信息,使用方法: ibd2sdi --dump-file=t_innodb.txt t_innodb.ibd,生成的t_innodb.txt 文件中有对应表的具体描述
  • sid = Serialized DictionaryInformation 序列化字典信息
  • 和8.0有所不同的是,在MySOL5.X及以前的版本中使用一个后缀为 .frm 的二进制文件来记录和描述表定义的信息
在这里插入图片描述


这里面利用 json 格式的字符串保存了这个表的所有数据

在这里插入图片描述

👥总结

本篇博文对 【MySQL】存储引擎 - InnoDB详解 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

Read more

手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人

手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人

手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人 当前版本 OpenClaw(2026.2.22-2)已内置飞书插件,无需额外安装。 你有没有想过,在飞书里直接跟 AI 对话,就像跟同事聊天一样自然? 今天这篇文章,带你从零开始,用 OpenClaw 搭建一个飞书 AI 机器人。全程命令行操作,10 分钟搞定。 一、准备工作 1.1 安装 Node.js(版本 ≥ 22) OpenClaw 依赖 Node.js 运行,首先确保你的 Node 版本不低于 22。 推荐使用 nvm 管理 Node

By Ne0inhk

【无人机3D路径规划】基于改进蝙蝠优化算法的无人机3D路径规划研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室  👇 关注我领取海量matlab电子书和数学建模资料  🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍  一、引言 在当今科技飞速发展的时代,无人机在众多领域得到了广泛应用,从物流配送、农业监测到航空测绘等。在这些应用场景中,无人机需要在三维空间中规划出一条安全、高效的飞行路径,以完成各种任务。传统的路径规划算法在处理复杂的 3D 环境时,往往存在收敛速度慢、易陷入局部最优等问题。蝙蝠优化算法(Bat Algorithm,BA)作为一种新兴的智能优化算法,模拟了蝙蝠的回声定位行为,为解决此类问题提供了新的思路。然而,标准的蝙蝠优化算法也有其局限性,因此本文聚焦于基于改进蝙蝠优化算法的无人机 3D 路径规划研究,旨在提升路径规划的性能。 二、蝙蝠优化算法基础 1. 蝙蝠回声定位模拟:蝙蝠在飞行过程中通过发出超声波,并根据回声来感知周围环

By Ne0inhk
EnvPilot:一款基于 Rust 的跨平台环境变量神器,一键搞定 Windows/Linux 环境配置!

EnvPilot:一款基于 Rust 的跨平台环境变量神器,一键搞定 Windows/Linux 环境配置!

文章目录 * 1. 项目介绍🎯 * 1.1. 什么是 EnvPilot? * 1.2. 为什么选择 EnvPilot? * 2. 核心优势:四大痛点全部解决!💪 * ✅ 痛点一:添加不生效?已修复! * ✅ 痛点二:删除删不掉?已修复! * ✅ 痛点三:PATH 清理失效?已修复! * ✅ 痛点四:误操作无法恢复?已解决! * 3. 支持的开发环境🛠️ * 4. 详细使用教程📖 * 4.1. Windows 平台使用教程 * 1️⃣ 下载安装 * 2️⃣ 配置环境变量 * 3️⃣ 清除环境变量 * 4.2. Linux 平台使用教程 * 1️⃣ 从源码编译 * 2️⃣ 配置环境变量 * 3️

By Ne0inhk

RocketMQ与RabbitMQ全方位深度对比分析

文章目录 * 前言 * 一、设计基因:根本差异的源头 * 1.1 出身与定位 * 1.2 设计哲学的本质差异 * 1.3 核心优势领域 * 二、架构与消息模型:从底层机制看差异 * 2.1 存储引擎差异 * RocketMQ:CommitLog + ConsumeQueue * RabbitMQ:队列 + Mnesia * 2.2 核心组件对比 * 2.3 消息路由机制对比 * RocketMQ:Topic + Tag 二级过滤 * RabbitMQ:Exchange 多样化路由 * 2.4 消息流转完整链路 * RocketMQ 消息流转 * RabbitMQ 消息流转 * 三、集群架构与高可用机制 * 3.1

By Ne0inhk