用了这么久mysql,你mysql中一行数据是怎么存储的吗?

众所周知,mysql的数据文件是保存在磁盘上的,但中间的数据具体保存在哪个文件夹下面呢?

其实不然,了解过数据库索引的小伙伴都知道,mysql中有不同种类的索引,哪这些索引与mysql存储数据又有什么关系?今天就解决这个问题

一、mysql数据存放在哪?

在本地mysql中建了leetcode库,中间创建了实例表t_order,具体如下图所示:

在存储表数据的目录中会出现如下的文件:

其中:

db.opt:存储了当前数据库的默认字符集和字符校验规则

t_order.frm:存储了表结构,在mysql的InnoDB引擎规则下,新建一张表,就会生成一个以表名开头,以.frm结尾的文件;

t_order.ibd:会存储该表中的具体数据,每一张表的数据都存存放在该文件夹下,新建一张表,就会生成一个以表名开头,以.ibd结尾的文件;

二、数据以什么样的形式存放?

在InnoDB引擎中,表空间由段(segment),区(extent),页(page),行(row)组成,他们之间的关系是:一个段由多个区组成,一个区由多个页组成,一个页由多个行组成

行:数据库表中的记录都是按照行来存储的,根据不同的引擎,有不同的存储结构

页:在读取数据的时候,是按照页为单位进行读取的,并不以行读取;一个页默认大小是16kb,也就是最多能保证16kb的连续存储;当我们客户端读取数据的时候,并不是把行数据读取,而是把该行所在的页全部读取到内存中;在这里,我们只需要知道数据读取的最小单位是页即可;

区:在B+数中,每一层都是通过双向链表进行链接;在页的定义中,我们知道,一个页里面的数据一定是连续,页与页之间不一定是连续的,如果页与页之间的物理位置并不是连续的,那么读取数据时候就会产生大量的磁盘IO,导致性能下降;那么该怎么解决这个问题?

  既然不相邻会产生大量的磁盘IO,那么我们让页与页之间彼此相邻,不就解决了吗?为此,在表中数据量很大的时候,为某个索引分配空间的时候就不再按照以页为单位进行分配,而是以区为单位进行分配,每个区的大小默认为1MB,对于16kb大小的页来说,连续的64页会被分到同一个区中,这样就使得链表中相邻的页的物理位置相邻,减少磁盘IO

  段:包括数据段(B+树种叶子节点的集合),索引段(B+树中非叶子节点的集合),回滚段

#牛客创作赏金赛##悬赏#
【猜你想看】大数据面经 文章被收录于专栏

不定期分享大数据相关技术面经,本着免费原则,随意白嫖

全部评论

相关推荐

面了差不多27分钟自我介绍面试一开始,面试官打开了摄像头,但由于网络问题,我提到面试官说话有点卡,随后他就关闭了摄像头。谈谈你对C++、Go语言和Java语言的理解面试官让我谈谈对这三种编程语言的理解,我主要讲了指针、内存回收等方面的内容。谈谈你对HTTPS的理解这个问题主要考察我对网络安全协议的了解。进程与线程的区别面试官让我解释进程和线程的区别。你实习项目说一下我详细介绍了自己在实习期间参与的项目。你的博客项目是你自己做的一个博客项目吗?我如实回答,项目是跟着网上教程做的,但我自己扩展了一些功能,比如实现了线程池。Java垃圾回收机制面试官让我解释Java的垃圾回收机制。反问环节面试官表示我掌握的知识还可以,但对C++和Go语言的接触较少。随后他问我对云的了解,我回答了云服务器和网盘等常见的云服务,并与传统硬件和存储进行了对比。面向对象:2025届毕业生,可使用此内推码:NTAAi5Z1. 官网投递进入校招官网,输入内推码进行:投递即可(1)云智校招官网:https://app-tc.mokahr.com/m/recommendation-apply/csig/6007?sharePageId=54604&recommendCode=NTAAi5Z&codeType=1#/recommendation/page/54604(2)云智内推码:NTAAi5Z2. 工作地点西安、武汉、长沙、重庆、厦门、大连3. Q&AQ:我可以投递几个岗位?A:每位同学可投递两个岗位(如后台开发-2025届校园招聘 & 客户端开发-2025届校园招聘),请同学们查看岗位描述,选择最适合的岗位进行投递。如同学在简历筛选后希望修改投递岗位,请通过邮箱或者云智校招QQ与我们联系。Q:之前投递过暑期实习岗位,秋招还能投递吗?A:可以,不影响秋招简历投递哦,快选择心仪的职位投递吧!Q:面试方式是什么?A:本次校园招聘以线上远程面试为主,在线上远程视频面试时,建议同学处于熟悉且安静的环境中,并提前检查摄像头、麦克风和耳机是否运行正常、网速达标且稳定等、安装最米哈游新版的腾讯会议或Chrome/QQ浏览器。面试安排若有任何变动,我们将第一时间通过短信或邮件告知。Q:我想调整面试时间或面试形式,应该联系谁?A:请尽量按时参与面试,如果临时有事或因不可抗力无法参加,可以通过邮箱或者云智校招QQ与我们联系,说明你的姓名、联系方式、调整原因以及可以调整的几个时间段。Q:如何查看我的面试进展?A:如需查询招聘进展,可点击【腾讯云智研发】微信公众号,在后台回复“校招进度”即可获得查询链接;也可以登录云智校招官网,进入“投递记录“查看招聘进展及面试情况。Q:云智与腾讯集团的关系是什么?A:云智全称腾讯云与智慧产业研发公司,简称“云智研发公司”。作为腾讯集团的子公司,云智由腾讯云与智慧产业事业群(CSIG)全面管理,与CSIG总部联合形成分布式研发的组织模式,推进云与产业互联网战略落地。Q:我们是腾讯员工吗?薪酬福利如何?A:云智研发公司是腾讯旗下的子公司,我们是腾讯子公司正式员工。云智研发公司独立运行,致力于为每一个加入团队的伙伴提供有保障和竞争力的薪酬福利、成长发展平台。投递的uu评论一下姓名缩写加岗位(HFG+产品经理),我会尽力跟进~经理),我会尽力跟进~
腾讯云智研发
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务