深入学习 Mysql 引擎 InnoDB、MyISAM
tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。
💕💕 推荐:体系化学习Java(Java面试专题)
文章目录
- 1、InnoDB、MyISAM 区别
- 2、InnoDB
- 3、InnoDB 为什么采用 B+ 树
- 4、MyISAM
- 5、InnoDB 和 MyISAM 在存储文件上的差异
- 6、InnoDB SQL 的应用

1、InnoDB、MyISAM 区别
MySQL 引擎 InnoDB 和 MyISAM 是 MySQL 中常用的两种存储引擎,它们具有以下不同的特点:
-
InnoDB 支持事务,而 MyISAM 不支持事务。
-
InnoDB 支持行级锁定,而 MyISAM 支持表级锁定。在并发访问的情况下,InnoDB 的性能更好。
-
InnoDB 支持外键约束,而 MyISAM 不支持外键约束。
-
InnoDB 支持崩溃恢复和故障转移,而 MyISAM 不支持。
-
InnoDB 支持自动增量列,而 MyISAM 也支持自动增量列。
综上所述,如果需要支持事务、外键约束和并发访问,以及更好的崩溃恢复和故障转移能力,建议使用 InnoDB 引擎。如果只是进行简单的数据存储和查询,并且需要更快的性能,可以考虑使用 MyISAM 引擎。但需要注意的是,MySQL 5.5 版本之后默认的存储引擎是 InnoDB,因此在选择存储引擎时需要考虑到版本的兼容性。
2、InnoDB

InnoDB 是 MySQL 数据库中的一种存储引擎,它是 MySQL 数据库默认的存储引擎之一。InnoDB 存储引擎支持事务、行级锁、多版本并发控制(MVCC)等高级特性,可以提供高并发、高可靠性和高性能的数据存储和访问能力。
InnoDB 存储引擎采用 B+ 树作为索引结构,支持主键、唯一键、普通索引等多种索引类型。同时,它还支持外键约束、自动增长列、全文索引等高级特性,可以满足各种复杂应用场景的需求。
在 InnoDB 存储引擎中,数据存储在表空间文件中,包括系统表空间文件和用户表空间文件。系统表空间文件包含 InnoDB 存储引擎的一些系统信息,如数据字典、Undo 日志等;用户表空间文件则包含用户创建的表、索引等数据。
3、InnoDB 为什么采用 B+ 树

InnoDB 存储引擎采用 B+ 树作为索引结构,B+ 树是一种多路平衡查找树,相比于 B 树,B+ 树具有以下几个优点:
-
减少磁盘 I/O 次数:B+ 树的非叶子节点不存储数据,只存储索引信息,因此可以存储更多的索引信息,减少磁盘 I/O 次数。
-
提高查询效率:B+ 树的叶子节点形成一个有序链表,可以快速进行范围查询和排序操作。
-
支持高并发:B+ 树的节点通常比较小,可以存储在内存中,减少锁冲突和等待时间。
InnoDB 存储引擎的 B+ 树索引结构包括以下几个部分:
-
根节点:通常只有一个,存储整个 B+ 树的基本信息。
-
中间节点:用于存储索引信息,包括索引值和指向下一级节点的指针。
-
叶子节点:存储实际的数据信息,包括主键值和数据行的地址。
-
辅助节点:用于存储锁信息和 MVCC 信息。
通过 B+ 树索引结构,InnoDB 存储引擎可以快速定位数据行,实现高效的查询和更新操作。
4、MyISAM
MyISAM 是 MySQL 数据库中的一种存储引擎,它是 MySQL 早期默认的存储引擎之一。MyISAM 存储引擎不支持事务、行级锁、多版本并发控制(MVCC)等高级特性,但它具有简单、高效、易于维护等特点,适用于一些对数据完整性要求不高、读写比例较高的应用场景。
MyISAM 存储引擎采用 B 树作为索引结构,支持主键、唯一键、普通索引等多种索引类型。同时,它还支持表级锁,即在写入数据时会锁定整个表,因此在高并发场景下可能会出现锁等待和死锁问题。
在 MyISAM 存储引擎中,数据存储在表文件中,包括数据文件和索引文件。数据文件存储实际的数据信息,而索引文件存储索引信息,包括索引值和指向数据文件中数据行的指针。
总的来说,MyISAM 存储引擎已经逐渐被 InnoDB 存储引擎所替代,但在一些特定的应用场景中,它仍然具有一定的优势。
5、InnoDB 和 MyISAM 在存储文件上的差异
InnoDB 和 MyISAM 存储引擎的文件差异主要表现在以下几个方面:
-
文件扩展名:InnoDB 存储引擎的表文件扩展名为 .ibd,而 MyISAM 存储引擎的表文件扩展名为 .MYD 和 .MYI。
-
存储结构:InnoDB 存储引擎的表文件包含数据文件和索引文件,而 MyISAM 存储引擎的表文件包含数据文件和索引文件,但是索引文件分为 .MYI 和 .MYD 两个文件,其中 .MYI 文件存储索引信息,.MYD 文件存储数据信息。
-
表空间:InnoDB 存储引擎的表空间文件包括系统表空间文件和用户表空间文件,而 MyISAM 存储引擎的表空间文件只包括数据文件和索引文件。
-
锁机制:InnoDB 存储引擎支持行级锁和事务,而 MyISAM 存储引擎只支持表级锁,因此在高并发场景下,InnoDB 存储引擎的性能要优于 MyISAM 存储引擎。
因为 InnoDB 的索引和数据都在一个文件中,所以它的索引称为聚簇索引,而MyISAM的索引和数据不在一起,因此成为非聚簇索引。InnoDB 存储引擎相比 MyISAM 存储引擎具有更加先进和完善的特性,因此在实际应用中,建议优先选择 InnoDB 存储引擎。
6、InnoDB SQL 的应用
下面是一个使用 InnoDB 存储引擎的 SQL 示例:
CREATE TABLE `orders` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`product_id` int(11) NOT NULL,`quantity` int(11) NOT NULL,`price` decimal(10,2) NOT NULL,`status` varchar(20) NOT NULL,`created_at` datetime NOT NULL,`updated_at` datetime NOT NULL,PRIMARY KEY (`id`),KEY `user_id` (`user_id`),KEY `product_id` (`product_id`),CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
这个 SQL 创建了一个名为 `orders` 的表,用于存储订单信息。该表使用了 InnoDB 存储引擎,并定义了多个字段,包括订单 ID、用户 ID、商品 ID、数量、价格、状态、创建时间和更新时间等。此外,该表还定义了多个索引和外键,用于提高查询效率和保证数据一致性。
💕💕 本文由激流原创,首发于CSDN博客,博客主页 https://blog.csdn.net/qq_37967783?spm=1010.2135.3001.5421
💕💕喜欢的话记得点赞收藏啊
相关文章:
深入学习 Mysql 引擎 InnoDB、MyISAM
tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…...
【华为OD统一考试B卷 | 100分】阿里巴巴找黄金宝箱(V)(C++ Java JavaScript Python)
题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。 阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,并输出该最大值。 输入描述 第一行输入一个数字字串,数字之间…...
六步快速搭建个人网站
目录 第一步、选择搭建平台WordPress 第二步、选域名 1)域名在哪买? 2)域名怎么选? 3)以阿里云为例,讲解怎么买域名 第三步、选择服务器 第四步、申请主机、安装WordPress 第五步、选择WordPress模…...
TypeScript 中的 type 关键字有什么用?
创建类型别名 在 TypeScript 中,type 关键字用于创建类型别名(Type Alias)。类型别名可以给一个类型起一个新的名字,使代码更具可读性和可维护性。 类型别名可以用于定义各种类型,包括基本类型、复合类型和自定义类型…...
27 getcwd 的调试
前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径 不过 我们这里是从 具体的实现 来看一下 测试用例 就是简单的使用了一下 getcwd rootubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c #inc…...
使用IDEA使用Git:Git使用指北——实际操作篇
Git使用指北——实际操作 🤖:使用IDEA Git插件实际工作流程 💡 本文从实际使用的角度出发,以IDEA Git插件为基座讲述了如果使用IDEA的Git插件来解决实际开发中的协作开发问题。本文从 远程仓库中拉取项目,在本地分支进行开发&…...
java boot将一组yml配置信息装配在一个对象中
其实将一组yml数据封进一个对象中才是以后的主流开发方式 我们创建一个springboot项目 找到项目中的启动类所在目录 在同目录下创建一个类 名字你们可以随便取 我这里直接叫 dataManager 然后 在yml中定义这样一组数据信息 然后 我们在类中定义三个和这个配置信息相同的字段…...
【裸机开发】链接脚本(.lds文件)的基本语法
目录 一、什么是链接脚本? 二、链接脚本的基本语法格式 1、常用命令 2、内置变量 三、链接脚本的简单案例 一、什么是链接脚本? 一段程序的编译需要经历四个阶段(预处理—编译—汇编—链接),而链接脚本管理的就是…...
Java 进阶 -- 集合(三)
4、实现 实现是用于存储集合的数据对象,它实现了接口部分中描述的接口。本课描述了以下类型的实现: 通用实现是最常用的实现,是为日常使用而设计的。它们在标题为“通用实现”的表格中进行了总结。特殊目的实现是为在特殊情况下使用而设计的࿰…...
【华为OD机试真题 C语言】5、TLV解析 | 机试真题+思路参考+代码解析
文章目录 一、题目🎃题目描述🎃输入输出🎃样例1 二、思路参考三、代码参考🏆C语言 作者:KJ.JK 🍂个人博客首页: KJ.JK 🍂专栏介绍: 华为OD机试真题汇总,定期…...
(七)CSharp-刘铁锰版-事件
一、初步了解事件 定义:单词 Event ,译为“事件” 《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情” 角色: 使对象或类具备通知能力的成员 (中译&#x…...
【ROS】郭老二博文之:ROS目录
1、ROS2 【ROS】Ubuntu22.04安装ROS2(Humble Hawksbill) 【ROS】ROS2命令行工具详解 【ROS】ROS2中的概念和名词解释 【ROS】ROS2编程示例:话题订阅-发布-C版 【ROS】ROS2编程示例:服务和客户端-C版 【ROS】ROS2编程示例…...
Android应用程序进程的启动过程
Android应用程序进程的启动过程 导语 到这篇文章为止,我们已经简要地了解过了Android系统的启动流程了,其中比较重要的内容有Zygote进程的启动和SystemService以及Launcher的启动,接下来我们将要学习的是Android应用程序的启动过程ÿ…...
【2】Midjourney注册
随着AI技术的问世,2023年可以说是AI爆炸性成长的一年,近期最广为人知的AI服务除了chatgpt外,就是从去年五月就已经问世的AI绘画工具mid journey了。 ▲几个AI工具也代表了人工智能的热门阶段 只要输入一段文字,AI就会根据语意计算…...
第六十八天学习记录:高等数学:导数(宋浩板书)
导数是微积分中的一个概念,描述了函数在某一个点上的变化率。具体地说,函数 f ( x ) f(x) f(x)在 x a xa xa处的导数为 f ′ ( a ) f(a) f′(a),表示当 x x x在 a a a处发生微小的变化 Δ x \Delta x Δx时, f ( x ) f(x) f(x)对…...
unreal 5 实现角色拾取功能
要实现角色拾取功能,我们需要实现蓝图接口功能,蓝图接口主要提供的是蓝图和蓝图之间可以通信,接下来,跟着教程,实现一下角色的拾取功能。 首先,我们要实现一个就是可视区的物品在朝向它的时候,会…...
chatgpt赋能python:如何使用Python升序排列一个列表?
如何使用Python升序排列一个列表? 在Python编程中,我们经常需要对列表进行排序。列表排序是一种常见的操作,可以帮助我们对数据进行分析和管理。在这篇文章中,我们将学习如何使用Python对一个列表进行升序排列。 什么是升序排列…...
Lecture 20 Topic Modelling
目录 Topic ModellingA Brief History of Topic ModelsLDAEvaluationConclusion Topic Modelling makeingsense of text English Wikipedia: 6M articlesTwitter: 500M tweets per dayNew York Times: 15M articlesarXiv: 1M articlesWhat can we do if we want to learn somet…...
ThreadPoolExecutor线程池
文章目录 一、ThreadPool线程池状态二、ThreadPoolExecutor构造方法三、Executors3.1 固定大小线程池3.2 带缓冲线程池3.3 单线程线程池 四、ThreadPoolExecutor4.1 execute(Runnable task)方法使用4.2 submit()方法4.3 invokeAll()4.4 invokeAny()4.5 shutdown()4.6 shutdownN…...
chatgpt赋能python:Python实践:如何升级pip
Python实践:如何升级pip Python作为一门高效的脚本语言,被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具,是开发Python应用的必备工具。但是pip在使用过程中,有时候会出现版本不兼容或者出现漏洞等…...
PCB画板时的层数设置
在PCB设计领域,当我们说“几层板”的时候,指的就是电气层的数量(也就是导电的铜箔层数)。助焊层、阻焊层、丝印层、钻孔图这些,虽然也叫“层”,但它们是非电气层(或称辅助层)&#x…...
新能源运维数字化方案:帮我吧助力企业实现全流程智能管控
在“双碳”目标的深入推进下,新能源产业迎来高速发展期,光伏、风电、储能、新能源汽车等领域的市场规模持续扩大,行业发展重心从“投建”转向“运营与服务”。对于新能源企业而言,设备分布广、终端用户分散、设备智能化程度高&…...
【前沿解析】2026年3月25日:从机器人协同到全模态AI生态——中关村论坛与昆仑万维双重突破定义AI产业新范式
摘要:2026年3月25日,北京中关村论坛盛大开幕,展示了跨品牌机器人协同服务与昆仑万维三大世界第一梯队模型的突破进展。本文深入解析具身智能机器人“组团上岗”的技术原理、昆仑万维Matrix-Game 3.0、SkyReels V4、Mureka V9的全模态能力,以及产业协同生态的战略价值,涵盖…...
Python张量框架选型避坑清单:87个真实项目踩坑案例汇总(含ONNX兼容性断裂、梯度检查点失效、分布式checkpoint跨框架不一致等3类高危风险)
第一章:Python张量框架选型的底层逻辑与决策模型选择Python张量框架并非仅由“流行度”或“上手快慢”驱动,而是需穿透API表层,审视其内存布局、计算图构建机制、设备抽象粒度与编译优化能力等底层要素。不同框架在张量生命周期管理上存在本质…...
Simulink中卷积码编码硬判决、软判决译码BPSK系统误码率性能仿真的Matlab 201...
simulink 卷积码编码硬判决软判决译码BPSK系统误码率性能仿真 Matlab2015及以上版本可以运行。最近在折腾通信系统的误码率仿真,发现Simulink搞数字通信建模是真的方便。特别是卷积码这种自带状态记忆的编码方案,用模块拖拽比纯代码实现直观多了。今天咱…...
机场接送机哪个APP便宜?2026年实测告诉你答案
作品声明:个人观点、仅供参考。深夜落地浦东机场,拖着行李箱走向网约车候车区,抬头一看——溢价2.3倍,排队人数67人。这是今年3月初一位旅客的真实经历,在社交媒体上引发了不少共鸣。随着2026年民航出行持续升温&#…...
让知识传递更顺畅:在线教学课堂APP的功能设计
当学习不再局限于固定的教室和黑板,知识便有了更多抵达的方式。在线教学课堂APP正是这样一种载体,它将师生之间的互动延伸到线上,让学习随时随地在舒适的氛围中发生。以下从使用体验的角度,介绍其核心功能版块的设计思路。课程大厅…...
Confluence新手必看:5个高效编辑技巧让你秒变Wiki达人(含插件推荐)
Confluence新手必看:5个高效编辑技巧让你秒变Wiki达人(含插件推荐) 刚接触Confluence时,面对这个功能强大的企业Wiki平台,新手往往会感到无从下手。本文将分享5个经过实战验证的高效编辑技巧,帮助你快速掌…...
沉浸推理的线上聚会:线上剧本杀APP的功能设计
当好友散落在不同的城市,想要围坐一桌来一场酣畅淋漓的推理游戏似乎成了奢望。线上剧本杀APP的出现,打破了空间的限制,让热爱推理与角色扮演的人们能够在线上相聚,共同沉浸在一个个精心编织的故事里。以下从功能体验的角度&#x…...
Windows 11界面自定义终极指南:使用ExplorerPatcher恢复经典体验
Windows 11界面自定义终极指南:使用ExplorerPatcher恢复经典体验 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 还在为Windows 11 24H2的新界面感到不适?…...
