【MySQL中有哪些存储引擎?请你说说MySQL中innodb和myisam的区别?InnoDB引擎的三大特性?】

news2025/2/25 3:40:03

在这里插入图片描述

一.MySQL中有哪些存储引擎?

  1. InnoDB存储引擎
    InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,应该优先考虑InnoDB引擎。
  2. MylSAM存储引擎
    在MySQL 5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且崩溃后无法安全恢复。MyISAM对整张表加锁,很容易因为表锁的问题导致典型的的性能问题。
  3. Mrg_MylSAM
    Merge存储引擎,是一组MyIsam的组合,也就是说,他将MyIsam引擎的多个表聚合起来,但是他的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。
  4. Archive引擎
    Archive存储引擎只支持INSERT和SELECT操作,会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM表的磁盘I/O更少。但是每次SELECT查询都需要执行全表扫描。所以Archive表适合日志和数据采集类应用,Archive引擎是一个针对高速插入和压缩做了优化的简单引擎。
  5. Blackhole引擎
    Blackhole引擎没有实现任何的存储机制,它会丢弃所有插入的数据,不做任何保存。可以在一些特殊的复制架构和日志审核时发挥作用。但这种引擎在应用方式上有很多问题,因此并不推荐。
  6. CSV引擎
    CSV引擎可以将普通的CSV文件(逗号分割值的文件)作为MySQL 的表来处理,但这种表不支持索引。因此CSV引擎可以作为一种数据交换的机制,非常有用。
  7. Federated引擎
    Federated引擎是访问其他MySQL服务器的一个代理,它会创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。默认是禁用的。
  8. Memory 引擎
    Memory表至少比MyISAM 表要快一个数量级,数据文件是存储在内存中。Memory表的结构在重启以后还会保留,但数据会丢失。Memory表支持 Hash索引,因此查找操作非常快。Memroy表是表级锁,因此并发写入的性能较低,每行的长度是固定的,可能导致部分内存的浪费。
  9. NDB集群引擎
    使用MySQL服务器、NDB集群存储引擎,以及分布式的、share-nothing 的、容灾的、高可用的NDB数据库的组合,被称为MySQL集群((MySQL Cluster)。

二.请你说说MySQL中innodb和myisam的区别?

MySQL支持的存储引擎是很多的,没有绝对的好坏之分,只有每一种存储引擎使用在不同应用场景上合适与否、高效高低等等、而不能认为就innodb存储引擎就是最后的,这样其实是不对的。接下来我们就来学习一下面试过程中最常问的两款存储引擎的对比。看看你能回答全吗?

  1. 事务:InnoDB支持事务,MyISAM不支持
  2. 锁:InnoDB支持行级锁和表锁,MyISAM只支持表级锁
  3. 读写性能:InnoDB增删改性能更优,MyISAM查询性能更优
  4. 存储结构:InnoDB在磁盘存储为一个文件,MyISAM在磁盘上存储成三个文件(表定义、数据、索引)
  5. 全文索引:InnoDB不支持(但可通过插件等方式支持),MyISAM默认支持
  6. 外键:InnoDB支持外键,MyISAM不支持
  7. 存储空间:InnoDB需要更多的内存和存储,MyISAM支持支持三种不同的存储格式:静态表(默认)、动态表、压缩表
  8. 移植:InnoDB在数据量小时可通过拷贝数据文件、备份 binlog、mysqldump工具移植,数据量大时比较麻烦,可单独对某个表通过拷贝表文件移植
  9. 崩溃恢复:InnoDB有崩溃恢复机制,MyISAM没有.

三.InnoDB引擎的三大特性是什么?

InnoDB的三大特性是:BufferPool、自适应Hash索引、双写缓冲区。

3.1 自适应Hash索引

  1. InnoDB存储引擎内部自己去监控索引表,如果监控到某个索引经常用,那么就认为是热数据,然后内部自己创建一个hash索引,称之为自适应哈希索引( Adaptive Hash Index,AHI)。
  2. 创建以后,如果下次又查询到这个索引,那么直接通过hash算法推导出记录的地址,直接一次就能查到数据。
  3. InnoDB存储引擎使用的哈希函数采用除法散列方式,其冲突机制采用链表方式。

3.2 Buffer Pool

  1. 为了提高访问速度,MySQL预先就分配/准备了许多这样的空间,为的就是与MySQL数据文件中的页做交换,来把数据文件中的页放到事先准备好的内存中。
  2. 数据的访问是按照页(默认为16KB)的方式从数据文件中读取到 buffer pool中。Buffer Pool按照最少使用算法(LRU),来管理内存中的页。
  3. Buffer Pool实例允许有多个,每个实例都有一个专门的mutex保护。Buffer Pool中缓存的数据页类型有: 索引页、数据页、undo页、插入缓冲(insert buffer)、自适应哈希索引、InnoDB存储的锁信息、数据字典信息(data dictionary)等等。

3.3 双写缓冲区

  1. 双写缓冲区是一个位于系统表空间的存储区域,在写入时,InnoDB先把从缓冲池中的得到的page写入系统表空间的双写缓冲区。之后,再把page写到.ibd数据文件中相应的位置。如果在page写入数据文件的过程中发生意外崩溃,InnoDB在稍后的恢复过程中在doublewrite buffer中找到完好的page副本用于恢复。
  2. doublewrite是顺序写,开销比较小。所以在正常的情况下, MySQL写数据page时,会写两遍到磁盘上,第一遍是写到doublewrite buffer,第二遍是从doublewrite buffer写到真正的数据文件中。
  3. 写俩遍的主要作用是为了避免partial page write(部分页写入)的问题。因为InnoDB的page size一般是16KB,校验和写入到磁盘是以page为单位进行的。而操作系统写文件是以4KB作为单位的,每写一个page,操作系统需要写4个块,中间发生了系统断电或系统崩溃,只有一部分页面是写入成功的。这时page数据出现不一样的情形,从而形成一个"断裂"的page,使数据产生混乱。

四.总结

大家简单的回想一下我们上面学习过程的文章内容,看看自己是否掌握了呢?

  1. MySQL中有哪些存储引擎?
  2. 请你说说MySQL中innodb和myisam的区别?
  3. InnoDB引擎的三大特性?
    大概就是这些内容,MySQL真的很重要,一定要多花点时间来学习这块的知识,不断地积累。
    好了,这篇文章我们就说这么说吧,我是硕风和炜,我们下篇文章再见哦。

在这里插入图片描述

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

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

相关文章

PingCode 第三届开发者大会成功举办

PingCode 开发者大会或许会迟到,但永远不会缺席。原定于2022年10月24日举办的 “PingCode 开发者大会” 因疫情原因推迟,属于2022年 PingCode 开发者们的新知创想,不得不藏器待时。2023新春伊始,万象更新,伴随着万物逐…

不写代码、年薪百万,带你玩赚ChatGPT提示工程-高级提示

文章目录前言一、Zero-Shot提示二、Few-Shot 提示Few-shot Prompting 的局限性三、Chain-of-Thought Prompting四、Zero-Shot CoT五、Self-Consistency六、Generated Knowledge 提示七、Automatic Prompt Engineer (APE)总结前言 随着ChatGPT的大火,提示工程在大模…

按键修改阈值功能、报警功能、空气质量功能实现

按键修改阈值功能 要使用按键,首先要定义按键。通过查阅资料,可知按键的引脚如图所示:按键1(S1)通过KEY0与PA0连接,按键2(S2)通过KEY1与PE2连接,按键3(S3&…

成本降低90%,OpenAI正式开放ChαtGΡΤ

今天凌晨,OpenAI官方发布ChαtGΡΤ和Whisper的接囗,开发人员现在可以通过API使用最新的文本生成和语音转文本功能。OpenAI称:通过一系列系统级优化,自去年12月以来,ChαtGΡΤ的成本降低了90%;现在OpenAI用…

供应链依赖:您的GitHub连接可能会触发什么?

不祥之兆,在针对 GitHub 存储库的攻击激增之后,很难避免。 最近的CircleCI漏洞(客户的机密和加密密钥被盗)清楚地表明,攻击者已经了解并利用了这个向量。 现在比以往任何时候都更需要公司保护这些非人类连接&#xf…

记录2023.3.3下午的校招

文章目录一、校招的总览意义😎二、校招时,公司是怎么做的?如何提问的?我又是怎么回答的🤔2.1 公司最喜欢提问你的问题🙌三、校招期间,我应该如何去了解一家企业?😀三、建…

LeetCode 982. 按位与为零的三元组 -- 哈希统计

按位与为零的三元组 困难 101 相关企业 给你一个整数数组 nums &#xff0c;返回其中 按位与三元组 的数目。 按位与三元组 是由下标 (i, j, k) 组成的三元组&#xff0c;并满足下述全部条件&#xff1a; 0 < i < nums.length 0 < j < nums.length 0 < k <…

【C++笔记】异常处理

C语言处理错误的方式 传统的错误处理机制&#xff1a; 1.终止程序缺陷&#xff1a;用户难以接受。 2.返回错误码&#xff1a;缺陷&#xff1a;需要自己去查错误码对应的解释。 C语言一般使用错误码来处理错误&#xff0c;部分情况下才会用终止情况处理处理严重的错误。 C异常…

初识Liunx下的进程状态和环境变量以及进程优先级

文章目录前言1.进程状态1.阻塞与挂起2.Linux下的进程状态1.概念知识2.R状态2.休眠状态(S/D&#xff09;3.T状态4.Z状态(僵尸进程)和X状态5.孤儿进程3.环境变量1.概念2.获取环境变量1.环境变量表2.函数获取环境变量3.关于环境变量的理解和main函数中的两个参数1.环境变量的理解2…

学习笔记--目标检测基础知识大全

来源&#xff1a;投稿 作者&#xff1a;LSC 编辑&#xff1a;学姐 目录 1.特点 2.数据集 2.1 VOCS数据集 2.2 COCO数据集 3.评价指标 3.1 GroundTruth 3.2 IOU(交并比&#xff0c;Intersection over Union) 3.3 基本指标 3.4 AP与mAp 3.5 案例演示 4. 脑图&#xff…

代码规范----编程规约(下)

目录 四、OOP规约 五、日期时间 六、集合处理 四、OOP规约 &#xff08;1&#xff09;、避免通过一个类的对象引用访问此类的静态变量或静态方法&#xff0c;无谓增加编译器解析成本&#xff0c;直接用类名来访问即可 &#xff08;2&#xff09;、所有的覆写方法&#xff0…

【C语言学习笔记】:二级指针

指针可以指向一个普通类型的数据&#xff0c;例如 int、double、char 等&#xff0c;也可以指向一个指针类型的数据&#xff0c;例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针&#xff0c;我们就称它为二级指针&#xff0c;或者指向指针的指针。 假设…

Leetcode.2017 网格游戏

题目链接 Leetcode.2017 网格游戏 Rating &#xff1a; 1719 题目描述 给你一个下标从 0 开始的二维数组 grid&#xff0c;数组大小为 2 x n&#xff0c;其中 grid[r][c]表示矩阵中 (r, c)位置上的点数。现在有两个机器人正在矩阵上参与一场游戏。 两个机器人初始位置都是 (0…

带你看懂RuoYi动态数据源切换

文章目录数据源是什么一、spring中是如何处理各种数据源的&#xff1f;1.开搞springboot2.创建一个测试类二、有了如上的理论,那么想想动态切换数据源吧参考若依的动态数据源配置总结数据源是什么 数据源,对于java来说,就是可用的数据库,那么我平时开发的springboot springclo…

算机网络安全基础知识5:sql注入漏洞攻击,DVWA演示sql注入漏洞,如何利用sql注入查看数据库信息,sqlmap,sql注入漏洞的防御

算机网络安全基础知识5:sql注入漏洞攻击&#xff0c;DVWA演示sql注入漏洞&#xff0c;如何利用sql注入查看数据库信息&#xff0c;sqlmap&#xff0c;sql注入漏洞的防御 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能…

Unity/C#------委托与事件(一篇文章彻底搞懂...)

一&#xff1a;委托 所有的代码语言创造者母语都是英语&#xff0c;我们从英语翻译到中文的过程中难免会存在一些不太能还原本意的词&#xff0c;比如我之前一直不理解构造函数和析构函数&#xff0c;只知道这俩货作用相反&#xff0c;直到我看到了它的英文意思&#xff0c;Con…

spring重点整理篇--springMVC(嘿嘿,开心哟)

Spring MVC是的基于JavaWeb的MVC框架&#xff0c;是Spring框架中的一个组成部分(WEB模块) MVC设计模式&#xff1a; Controller&#xff08;控制器&#xff09; Model&#xff08;模型&#xff09; View&#xff08;视图&#xff09; 重点来了&#x1f604; SpringMVC的工作机制…

Nginx+Tomcat实现负载均衡、动静分离(脚本方法)

一、Nginx 负载均衡实现原理1、Nginx 实现负载均衡是通过反向代理实现反向代理&#xff08;Reverse Proxy&#xff09; 是指以 代理服务器&#xff08;例&#xff1a;Nginx&#xff09; 来接受 internet 上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0…

【PGMAN:无监督的生成式多对抗网络】

PGMAN: An Unsupervised Generative Multiadversarial Network for Pansharpening &#xff08;PGMAN&#xff1a;一种无监督的生成式多对抗网络&#xff09; 全色锐化的目的是融合低分辨率多光谱&#xff08;MS&#xff09;图像和由卫星获取的高分辨率全色&#xff08;PAN&a…

OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像

OnlyOffice验证&#xff08;三&#xff09;OnlyOffice编译结果自制Docker镜像 之前验证了OnlyOffice验证&#xff08;二&#xff09;在Centos7上部署OnlyOffice编译结果&#xff0c;由于现在普遍都是容器化部署&#xff0c;所以还是验证下Doker镜像打包是否可行&#xff0c;因为…