【MySQL】MySQL中MyIsAM和InnoDB存储引擎的区别(面试必考!!)

news2024/11/24 4:01:37

目录

MyIsAM和InnoDB的区别

区别主要在于:

事务支持:

并发控制:

外键支持:

数据缓存和索引:

这么说可能不太好理解,让我们展开聊聊

数据一致性和恢复:

InnoDB肯定是比myIsam的功能强大的,但是与此同时也带来了较大的性能开销


MyIsAM和InnoDB的区别

它们两个都是mysql数据库中常见的存储引擎,理论上来讲InnoDB的功能要比MyISAM强大不少。

区别主要在于:

MyISAM存储体现为两个文件,一个是数据文件、另一个是索引文件,因为索引和数据是分离的,所以在查找的时候需要先从索引文件去找到数据的磁盘位置,再在磁盘中找到索引的对应的数据内容

 InnoDB中,数据同样是存储在磁盘上,但是只有一个数据+索引的文件,在B+树的叶子节点存储了数据

 

事务支持:

  • MyISAM:MyISAM存储引擎不支持事务处理。它以表级锁为基础,适合于读取频繁、写入较少的应用场景。
  • InnoDB:InnoDB存储引擎支持ACID(原子性、一致性、隔离性、持久性)特性的事务处理,并具有行级锁定的能力,适合于高并发的读写操作。

并发控制:

  • MyISAM:MyISAM不支持外键约束。在表之间建立关系时,需要由应用程序层面进行维护和处理。
  • InnoDB:InnoDB支持外键约束,可以确保数据的完整性和一致性,并通过级联操作保持相关表之间的数据关系。、

外键支持:

  • MyISAM:MyISAM不支持外键约束。在表之间建立关系时,需要由应用程序层面进行维护和处理。
  • InnoDB:InnoDB支持外键约束,可以确保数据的完整性和一致性,并通过级联操作保持相关表之间的数据关系。

数据缓存和索引:

  • MyISAM:MyISAM使用表级锁定,可以更好地利用系统内存缓存以及缓存索引数据,适合于只读或很少更新的应用。
  • InnoDB:InnoDB支持缓存索引、数据和行锁定(同步操作,只有对这一行的数据操作完的时候才进行下一个操作),适合于高并发读写操作的应用。

这么说可能不太好理解,让我们展开聊聊

        在MyISAM中,由于使用表级锁定,它可以更好地利用系统内存缓存来存储数据和索引。例如,当查询一个MyISAM表时,整个表都会被加载到内存中进行查询操作。这样可以提高读取操作的速度,特别是对于只读或者很少更新的应用场景。对于频繁读取但很少写入的应用,MyISAM的内存缓存可以更好地满足读取需求,加快查询速度。

        InnoDB不仅支持缓存索引,还支持缓存数据和行级锁定。在InnoDB中,数据和索引存储在磁盘上,部分数据和索引会被加载到内存缓存(即内存池)中。当需要查询数据时,InnoDB会首先检查内存缓存,如果数据已经在内存中,则可以直接从内存中读取,从而加快读取操作的速度。对于频繁读写的应用来说,InnoDB的缓存机制可以更好地适应并发读写操作,并提供更好的性能。

        以一个通俗的例子来说明,想象你有一个大图书馆的书籍目录,你想要查找某本特定的书籍。如果你使用MyISAM存储引擎,你可以将整个目录复制到记忆中,这样当你需要查找书籍时,你只需在记忆中进行查找,速度较快。但是,如果你使用InnoDB存储引擎,你可能无法将整个目录复制到记忆中,而是根据需要从图书馆中获取所需信息。这样的话,尽管访问磁盘需要一些时间,但由于InnoDB的缓存机制,当你多次查找相同的书籍时,可以从内存中读取数据,节省了一些时间。

数据一致性和恢复:

  • MyISAM:MyISAM在崩溃或断电时没有自动恢复机制,容易造成数据损坏或丢失。
  • InnoDB:InnoDB通过事务日志(redo log)和回滚日志(undo log)来保证数据的一致性,具有更好的崩溃恢复能力。

InnoDB肯定是比myIsam的功能强大的,但是与此同时也带来了较大的性能开销

InnoDB 存储引擎相关的性能开销因素:

  1. 事务支持:InnoDB 存储引擎实现了 ACID 特性的事务处理,这需要额外的处理和记录事务日志。相比之下,MyISAM 没有事务支持,因此不需要进行额外的事务管理开销。

  2. 行级锁定:InnoDB 使用行级锁定,使得多个并发操作可以在不同的行上进行,提高了并发性。但行级锁的维护和管理需要额外的开销,特别是在高并发环境中。

  3. 磁盘空间占用:InnoDB 存储引擎使用聚集索引的方式存储数据,每张表都必须有一个主键。这会导致数据在磁盘上存储时占用更多的空间,相比之下,MyISAM 使用堆表的结构,占用的磁盘空间较小。

  4. 缓存和索引:InnoDB 存储引擎支持缓存索引和数据,通过内存缓存可以提高查询性能。但较大的缓存需要更多的内存资源,因此可能需要配置更高的内存以达到较好的性能。

        因此——虽然 InnoDB 存储引擎相对于 MyISAM 存储引擎在功能和可靠性上有优势,但也需要考虑应用程序的具体需求和性能要求。如果应用场景对并发性能和事务支持要求较高,那么选择 InnoDB 是一个更好的选择。而如果应用场景是以读为主,并且对磁盘空间占用比较敏感,那么 MyISAM 存储引擎可能更适合。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNU make系列之介绍Makefile

一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译,并且执行相应的命令来重新编译程序。在本系列博…

面试官:策略模式有使用过吗?我:没有......

面试官:策略模式有使用过吗?我:没有… 何为策略模式? 比如在业务逻辑或程序设计中比如要实现某个功能,有多种方案可供我们选择。比如要压缩一个文件,我们既可以选择 ZIP 算法,也可以选择 GZIP…

[Makefile] 预宏定义的使用

main.c 文件如下&#xff1a; #include <stdio.h> int main() {printf("soft infomation\n");//以下信息均在gcc时已预定义printf("soft_ver:\t%s\n",__VER__);printf("author:\t\t%s\n",__AUTHOR__);printf("sn_num:\t\t%d\n"…

递归算法应用(Python版)

文章目录 递归递归定义递归调用的实现递归应用数列求和任意进制转换汉诺塔探索迷宫找零兑换-递归找零兑换-动态规划 递归可视化简单螺旋图分形树&#xff1a;自相似递归图像谢尔宾斯基三角 分治策略优化问题和贪心策略 递归 递归定义 递归是一种解决问题的方法&#xff0c;其精…

Java后端开发面试题——消息中间篇

RabbitMQ-如何保证消息不丢失 交换机持久化&#xff1a; Bean public DirectExchange simpleExchange(){// 三个参数&#xff1a;交换机名称、是否持久化、当没有queue与其绑定时是否自动删除 return new DirectExchange("simple.direct", true, false); }队列持久化…

九、pikachu之敏感信息泄露

文章目录 1、敏感信息泄露概述2、实战 1、敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; 通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表;输入错误的url参数后报错信息里面…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

双指针算法实例3(快乐数)

题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结…

小白带你学习linux的keepalived+lvs和keepalived双机热备(三十七)

目录 一、keepalivedlvs作用 二、调度器配置 部署LVS主备调度器 调整master和backup的ARP参数&#xff08;一致&#xff09;全都安装一遍 启动master和backup的keepalived与ipvsadm 三、web节点配置 1、调整ARP参数 2、 配置虚拟IP地址 3、添加回环路由 一、keepalive…

开启元宇宙农场的绝世盛宴——Fram world

近年科技突飞猛进&#xff0c;元宇宙横扫游戏与金融领域&#xff0c;其中震惊全球的Fram world&#xff0c;不仅为玩家带来崭新娱乐&#xff0c;更在游戏与经济的融合中掀起惊人革命&#xff01;凭借Cardano基金会的强大支持&#xff0c;与英国英利区块链研究所的密切合作&…

Java多线程(十一)

目录 一、什么是CAS 二、CAS 是怎么实现的 三、CAS的应用 3.1 实现原子类 3.2 实现自旋锁 四、CAS的ABA问题 4.1 什么是ABA问题 4.2 ABA问题引发的BUG 4.3 ABA问题的解决方案 五、CAS与加锁的区别 一、什么是CAS CAS&#xff1a;全称Compare and swap&#xff0c;也就是“比较…

ASE入门系列

cast shadows、receive shadows 和阴影相关&#xff08;投射阴影和自身阴影&#xff09;&#xff0c;关闭&#xff0c;阴影消失&#xff1b; queue index 队列索引&#xff0c;不透明和半透明物体有一个默认队列&#xff0c;不透明物体&#xff0c;默认队列是2000&#xff0c…

cortex-A7核IIC实验--STM32MP157AAA

实验目的&#xff1a;采集温湿度传感器值 一&#xff0c;IIC概念 1.同步串行半双工总线&#xff0c;主要用于链接整体电路&#xff0c;硬件结构简单&#xff0c;接口连接方便&#xff0c;成本较低 2.两线制&#xff0c;只有两根双向信号线&#xff0c;数据线SDA,时钟线SCL …

【校招VIP】CSS校招考点之水平/垂直居中

考点介绍&#xff1a; 前端布局非常重要的一环就是页面框架的搭建&#xff0c;也是最基础的一环。在页面框架搭建之中&#xff0c;又有居中布局/多列布局/全局布局。今天介绍一下居中布局的水平居中和垂直居中。 『CSS校招考点之水平/垂直居中』相关题目及解析内容可点击文章末…

装备制造企业如何执行精益管理?

导 读 ( 文/ 2358 ) 精益管理是一种以提高效率、降低成本和优化流程为目标的管理方法。装备制造行业具备人工参与度高&#xff0c;产成品价值高&#xff0c;质量要求高的特点。 在装备制造企业中实施精益管理可以帮助企业提高竞争力、提升生产效率并提供高质量的产品。本文将…

架构评估-架构师之路(十二)

软件系统质量属性 软件系统质量熟悉分为 开发期质量属性 和 运行期质量属性。 质量属性 性能&#xff1a;指 系统的响应能力&#xff0c;如 响应时间&#xff0c;吞吐率。 设计策略&#xff1a;优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度。 可靠…

数据结构:二叉树及相关操作

文章目录 前言一、树的概念及结构1.什么是树2. 树的相关概念3.树的表示 二、二叉树概念及结构1.二叉树概念2.特殊的二叉树3.二叉树的性质4.二叉树的存储结构 三、平衡二叉树实现1.创建树和树的前中后遍历1.前中后遍历2.创建树且打印前中后遍历 2.转换为平衡二叉树和相关操作1.转…

【C++从0到王者】第二十三站:多态的概念、定义以及实现

文章目录 前言一、多态的概念二、多态的定义及实现1.虚函数2.虚函数重写3.多态的两个条件4.虚函数重写的两个例外5.前四点的一些总结6.析构函数的重写&#xff08;虚函数重写的第三个例外&#xff09;7. C11之override 和 final8.如何设计一个类&#xff0c;使得这个类不会被继…

三个视角解读ChatGPT在教学创新中的应用

第一&#xff0c;我们正处于一个学生使用ChatGPT等AI工具完成作业的时代&#xff0c;传统的教育方法需要适应变化。 教育工作者不应该因为学生利用了先进技术而惩罚他们&#xff0c;相反&#xff0c;应该专注于让学生去挑战超越AI能力范围的任务。这需要我们重新思考教育策略和…

Java8新特性之——Lambda表达式

文章目录 一、简介二、格式三、举例四、使用场景五、FunctionalInterface注解六、Lambda表达式的简化方式省略参数类型&#xff1a;如果上下文已经明确了参数的类型&#xff0c;可以省略参数类型的声明。省略参数括号&#xff1a;如果只有一个参数&#xff0c;可以省略参数的括…