【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

Git 提交信息的规范化简写格式

Git 提交信息的规范化简写格式

你想了解的是 Git 提交信息的规范化简写格式(也常被称为 Conventional Commits 规范),除了 feat、fix、refactor 之外,还有很多不同类型的前缀可以让提交信息更清晰、更有语义。 完整的规范提交前缀及含义 以下是业界通用的 Conventional Commits 规范中常用的前缀,按使用场景分类,每个前缀都有明确的语义: 前缀中文含义使用场景举例feat新增功能feat: 新增商品详情页分享功能fix修复 Bugfix: 修复移动端下拉刷新数据重复的问题refactor代码重构(无功能变更)refactor: 重构订单列表组件,优化代码结构docs文档修改docs: 更新 README 中的接口使用说明style代码格式调整(无逻辑变更)style: 格式化代码缩进,修正变量命名规范test测试相关test: 为用户登录接口添加单元测试chore琐碎工作(构建/工具等)chore: 升级依赖包 axios 到 1.6.0 版本perf性能优化perf: 优化商品列表查询 SQL,提升接口响应速度build构建相关(

By Ne0inhk
轮腿机器人代码调试补充

轮腿机器人代码调试补充

* @Author: 星夜雨夜 * @brief: 轮腿基础代码编写调试补充,移植自达妙开源代码 * @attention:笔者默认读者已经熟练掌握机甲大师RoboMaster c型开发板例程代码的底盘代码和INS_task.c陀螺仪代码、熟练掌握各电机can协议和遥控器dbus协议。默认读者已能看懂轮腿圣经和玺佬的五连杆运动学解算与VMC。建议读者仔细研读轮腿圣经3~5遍,边看MATLAB文件和达妙开源代码,掌握轮腿调试和编写大致思路。一定要注意各状态变量的单位和正负号是否正确,轮腿调试过程中,最难之处在于极性是否正确。本车所有电机均为逆时针旋转为正方向。 !!!强烈建议读者在开发轮腿之前,先运用LQR算法完成一阶倒立摆的平衡小车(即板凳模型)的实现 !!!如果时间紧,其实完全可以不搞仿真,直接实机开调。仿真不疯,实物不一定不疯;但实物疯,仿真必疯。 调试成果展示视频链接(抖音):轮腿机器人 一阶倒立摆平衡小车参考资料: 1.本科毕设 轮腿式双足机器人 开源文件演示_哔哩哔哩_bilibili(资料在视频评论区) 2.达妙平衡小车开源:[达妙科技开源系列-平衡小车] 第一弹_哔哩

By Ne0inhk
Rokid AR眼镜开发入门:构建智能演讲提词器Android应用

Rokid AR眼镜开发入门:构建智能演讲提词器Android应用

文章目录 * 一、前言 * 二、项目介绍 * 2.1、项目背景 * 2.2、本项目整体思路 * 三、案例开发 * 3.1、申请开发者 * 3.2、Clone RokidSDKDemoKotlin 项目 * 3.3、集成 Rokid Mobile SDK * 3.4、UI 以及眼镜侧渲染 * 四、优化与一些调试经验 * 五、个人总结 一、前言 各位大家好,我是开发者Bluetata,在数字化浪潮席卷全球的当下,增强现实(AR)技术正悄然重塑我们的工作与生活方式。从虚拟试衣到工业远程协作,AR眼镜以其轻便、沉浸的特性,成为连接现实与数字世界的桥梁。其中,Rokid作为AR领域的先锋品牌,其智能眼镜系列(

By Ne0inhk

机器人系统架构十年演进典型架构对比

机器人系统架构十年演进典型架构对比 2015-2025年,机器人系统架构完成了从硬件绑定紧耦合单机架构→模块化分布式松耦合架构→云边端一体化云原生架构→具身原生端云协同通用架构的四次代际跃迁。本文聚焦每个阶段的行业标杆典型架构,从核心设计、全栈维度、优劣势、适用场景做横向+纵向深度对比,清晰还原十年间架构的本质变革与技术迭代逻辑。 一、四大阶段核心典型架构总览对比表 本表覆盖十年间四个演进阶段的行业公认标杆架构,从全栈技术维度做横向对比,是架构演进的核心浓缩。 演进阶段2015-2017 萌芽期2018-2020 起步期2021-2023 成熟期2024-2025 爆发期核心架构范式硬件绑定的单机嵌入式紧耦合架构分层模块化分布式松耦合架构云边端三级协同云原生全栈架构具身原生端云协同软硬一体化架构行业标杆典型架构1. 发那科30iB工业机器人闭源架构 2. ROS 1 Noetic中心化开源架构1. ROS 2 Dashing/Eloquent分布式架构 2. 海康/极智嘉AMR模块化架构1. 华为RoboOS V1.0云边端架构 2. 新松SRCS数字孪生原生架构1. 华

By Ne0inhk