当前位置: 首页 > news >正文

深入学习 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 中常用的两种存储引擎,它们具有以下不同的特点:

  1. InnoDB 支持事务,而 MyISAM 不支持事务。

  2. InnoDB 支持行级锁定,而 MyISAM 支持表级锁定。在并发访问的情况下,InnoDB 的性能更好。

  3. InnoDB 支持外键约束,而 MyISAM 不支持外键约束。

  4. InnoDB 支持崩溃恢复和故障转移,而 MyISAM 不支持。

  5. 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+ 树具有以下几个优点:

  1. 减少磁盘 I/O 次数:B+ 树的非叶子节点不存储数据,只存储索引信息,因此可以存储更多的索引信息,减少磁盘 I/O 次数。

  2. 提高查询效率:B+ 树的叶子节点形成一个有序链表,可以快速进行范围查询和排序操作。

  3. 支持高并发:B+ 树的节点通常比较小,可以存储在内存中,减少锁冲突和等待时间。

InnoDB 存储引擎的 B+ 树索引结构包括以下几个部分:

  1. 根节点:通常只有一个,存储整个 B+ 树的基本信息。

  2. 中间节点:用于存储索引信息,包括索引值和指向下一级节点的指针。

  3. 叶子节点:存储实际的数据信息,包括主键值和数据行的地址。

  4. 辅助节点:用于存储锁信息和 MVCC 信息。

通过 B+ 树索引结构,InnoDB 存储引擎可以快速定位数据行,实现高效的查询和更新操作。

4、MyISAM

MyISAM 是 MySQL 数据库中的一种存储引擎,它是 MySQL 早期默认的存储引擎之一。MyISAM 存储引擎不支持事务、行级锁、多版本并发控制(MVCC)等高级特性,但它具有简单、高效、易于维护等特点,适用于一些对数据完整性要求不高、读写比例较高的应用场景。

MyISAM 存储引擎采用 B 树作为索引结构,支持主键、唯一键、普通索引等多种索引类型。同时,它还支持表级锁,即在写入数据时会锁定整个表,因此在高并发场景下可能会出现锁等待和死锁问题。

在 MyISAM 存储引擎中,数据存储在表文件中,包括数据文件和索引文件。数据文件存储实际的数据信息,而索引文件存储索引信息,包括索引值和指向数据文件中数据行的指针。
总的来说,MyISAM 存储引擎已经逐渐被 InnoDB 存储引擎所替代,但在一些特定的应用场景中,它仍然具有一定的优势。

5、InnoDB 和 MyISAM 在存储文件上的差异

InnoDB 和 MyISAM 存储引擎的文件差异主要表现在以下几个方面:

  1. 文件扩展名:InnoDB 存储引擎的表文件扩展名为 .ibd,而 MyISAM 存储引擎的表文件扩展名为 .MYD 和 .MYI。

  2. 存储结构:InnoDB 存储引擎的表文件包含数据文件和索引文件,而 MyISAM 存储引擎的表文件包含数据文件和索引文件,但是索引文件分为 .MYI 和 .MYD 两个文件,其中 .MYI 文件存储索引信息,.MYD 文件存储数据信息。

  3. 表空间:InnoDB 存储引擎的表空间文件包括系统表空间文件和用户表空间文件,而 MyISAM 存储引擎的表空间文件只包括数据文件和索引文件。

  4. 锁机制: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&#xff09;域名在哪买&#xff1f; 2&#xff09;域名怎么选&#xff1f; 3&#xff09;以阿里云为例&#xff0c;讲解怎么买域名 第三步、选择服务器 第四步、申请主机、安装WordPress 第五步、选择WordPress模…...

TypeScript 中的 type 关键字有什么用?

创建类型别名 在 TypeScript 中&#xff0c;type 关键字用于创建类型别名&#xff08;Type Alias&#xff09;。类型别名可以给一个类型起一个新的名字&#xff0c;使代码更具可读性和可维护性。 类型别名可以用于定义各种类型&#xff0c;包括基本类型、复合类型和自定义类型…...

27 getcwd 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径 不过 我们这里是从 具体的实现 来看一下 测试用例 就是简单的使用了一下 getcwd rootubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c #inc…...

使用IDEA使用Git:Git使用指北——实际操作篇

Git使用指北——实际操作 &#x1f916;:使用IDEA Git插件实际工作流程 &#x1f4a1; 本文从实际使用的角度出发&#xff0c;以IDEA Git插件为基座讲述了如果使用IDEA的Git插件来解决实际开发中的协作开发问题。本文从 远程仓库中拉取项目&#xff0c;在本地分支进行开发&…...

java boot将一组yml配置信息装配在一个对象中

其实将一组yml数据封进一个对象中才是以后的主流开发方式 我们创建一个springboot项目 找到项目中的启动类所在目录 在同目录下创建一个类 名字你们可以随便取 我这里直接叫 dataManager 然后 在yml中定义这样一组数据信息 然后 我们在类中定义三个和这个配置信息相同的字段…...

【裸机开发】链接脚本(.lds文件)的基本语法

目录 一、什么是链接脚本&#xff1f; 二、链接脚本的基本语法格式 1、常用命令 2、内置变量 三、链接脚本的简单案例 一、什么是链接脚本&#xff1f; 一段程序的编译需要经历四个阶段&#xff08;预处理—编译—汇编—链接&#xff09;&#xff0c;而链接脚本管理的就是…...

Java 进阶 -- 集合(三)

4、实现 实现是用于存储集合的数据对象&#xff0c;它实现了接口部分中描述的接口。本课描述了以下类型的实现: 通用实现是最常用的实现&#xff0c;是为日常使用而设计的。它们在标题为“通用实现”的表格中进行了总结。特殊目的实现是为在特殊情况下使用而设计的&#xff0…...

【华为OD机试真题 C语言】5、TLV解析 | 机试真题+思路参考+代码解析

文章目录 一、题目&#x1f383;题目描述&#x1f383;输入输出&#x1f383;样例1 二、思路参考三、代码参考&#x1f3c6;C语言 作者&#xff1a;KJ.JK &#x1f342;个人博客首页&#xff1a; KJ.JK &#x1f342;专栏介绍&#xff1a; 华为OD机试真题汇总&#xff0c;定期…...

(七)CSharp-刘铁锰版-事件

一、初步了解事件 定义&#xff1a;单词 Event &#xff0c;译为“事件” 《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情” 角色&#xff1a; 使对象或类具备通知能力的成员 &#xff08;中译&#x…...

【ROS】郭老二博文之:ROS目录

1、ROS2 【ROS】Ubuntu22.04安装ROS2&#xff08;Humble Hawksbill&#xff09; 【ROS】ROS2命令行工具详解 【ROS】ROS2中的概念和名词解释 【ROS】ROS2编程示例&#xff1a;话题订阅-发布-C版 【ROS】ROS2编程示例&#xff1a;服务和客户端-C版 【ROS】ROS2编程示例&#xf…...

Android应用程序进程的启动过程

Android应用程序进程的启动过程 导语 到这篇文章为止&#xff0c;我们已经简要地了解过了Android系统的启动流程了&#xff0c;其中比较重要的内容有Zygote进程的启动和SystemService以及Launcher的启动&#xff0c;接下来我们将要学习的是Android应用程序的启动过程&#xff…...

【2】Midjourney注册

随着AI技术的问世&#xff0c;2023年可以说是AI爆炸性成长的一年&#xff0c;近期最广为人知的AI服务除了chatgpt外&#xff0c;就是从去年五月就已经问世的AI绘画工具mid journey了。 ▲几个AI工具也代表了人工智能的热门阶段 只要输入一段文字&#xff0c;AI就会根据语意计算…...

第六十八天学习记录:高等数学:导数(宋浩板书)

导数是微积分中的一个概念&#xff0c;描述了函数在某一个点上的变化率。具体地说&#xff0c;函数 f ( x ) f(x) f(x)在 x a xa xa处的导数为 f ′ ( a ) f(a) f′(a)&#xff0c;表示当 x x x在 a a a处发生微小的变化 Δ x \Delta x Δx时&#xff0c; f ( x ) f(x) f(x)对…...

unreal 5 实现角色拾取功能

要实现角色拾取功能&#xff0c;我们需要实现蓝图接口功能&#xff0c;蓝图接口主要提供的是蓝图和蓝图之间可以通信&#xff0c;接下来&#xff0c;跟着教程&#xff0c;实现一下角色的拾取功能。 首先&#xff0c;我们要实现一个就是可视区的物品在朝向它的时候&#xff0c;会…...

chatgpt赋能python:如何使用Python升序排列一个列表?

如何使用Python升序排列一个列表&#xff1f; 在Python编程中&#xff0c;我们经常需要对列表进行排序。列表排序是一种常见的操作&#xff0c;可以帮助我们对数据进行分析和管理。在这篇文章中&#xff0c;我们将学习如何使用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实践&#xff1a;如何升级pip Python作为一门高效的脚本语言&#xff0c;被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具&#xff0c;是开发Python应用的必备工具。但是pip在使用过程中&#xff0c;有时候会出现版本不兼容或者出现漏洞等…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...