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

JAVA面经整理(8)

一)为什么要有区,段,页?

1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式,不过索引信息以及数据记录都是记录在文件上面的,确切来说是存储在页结构中,另一方面,索引是在存储引擎中实现的,MYSQL服务器上面的存储引擎负责对于表中的数据进行读取和写入操作,不同的存储引擎中存放的格式是不同的,有的存储引擎例如Memory甚至都不用磁盘存储数据

2)InnoDB见数据划分成若干个页,页的大小默认是16KB,MYSQL以页作为磁盘和内存交互的基本单位,也就是说MYSQL一次至少将16KB的数据从磁盘加载到内存里面,一次也是至少把内存中的16KB数据刷新到磁盘上,也就是说从数据库中无论是读一行还是读取多行,都是将这些行所在的页进行加载,也就是说数据库进行存储空间的基本单位是页,数据库IO操作的最小单位是页,一个页中可以有多条行记录

3)页和页之间并不会在物理结构上直接相连,而是通过链表进行相连

1)什么要有区? 

1.1)select * from user where userID>1 and userID<5,这些满足要求的数据可能分布在不同的页中,我们就需要找到所有数据所在的页,想要将页加载到内存中,实际上页和页之间在物理磁盘中离的是非常远的,MYSQL需要依次找到三个页的物理磁盘位置并把它们加载到磁盘中,因为磁盘中的磁头在去查找页的时候需要做寻道,盘片的旋转都需要时间,这种状况就称之为随机IO,随机IO中磁盘的读写速度和内存的操作速度相差了好几个数量级,在磁盘中查找页,如果页分散在磁盘上面的不同区域,找页就非常麻烦

1.2)顺序IO:所以说尽量让链表中相邻的页的物理位置也相邻,所以进行磁盘范围查询的时候方便,使用顺序IO,尽量让三个页在物理磁盘上是挨着的,是连续存放的,这样进行寻找的时候就能减少盘片旋转和磁道扫描的过程,这样加载速度就会快很多,分一个区就是为了保证一波页是在物理磁盘时尽量连续的,这样子就减少了随机IO;

1.3)但是区和区不一定是连续的,所以很有可能我们查询的数据都在一个区里面,多个页在一个区内,比之前多个页随机分布在磁盘上面的各个位置要靠谱得多

 

2)为什么要有段? 

1)在区里面存放页,区里面的页是连续存储,现在还是进行查询

select * from user where userID>1 and userID<5,现在已经定位到userID大于等于1小于等于5这个范围了,现在感兴趣的只是B+树的叶子节点中所在的页

2)但是非叶子节点也是页,但是现在的区中极有可能存放叶子节点中的页,也有可能存放非叶子节点中的这些目录页,区中既有目录页也有数据页,但是感兴趣的只有数据页,因为都放,可能就会导致数据页放的少了,此时加载数据的时候,发现加载一个页数据项不够,又要跳转到下一个区,这个时候就不纯粹了,所以说能不能做到这样,特定的区只能存放叶子结点的那些页,有一些区专门存放非叶子节点的那些页,这样在进行定位数据的时候直接定位到叶子节点所在的区即可

3)一个段里面可能有多个区,非叶子节点多分配几个区,这些区都在一个段里面

http://www.lryc.cn/news/183067.html

相关文章:

  • 【Java 进阶篇】JDBC数据库连接池Druid详解
  • Linux——指令初识
  • 专题一:双指针【优选算法】
  • 蓝桥等考Python组别十二级007
  • 全方位介绍工厂的MES质量检验管理系统
  • 避免风险,亚马逊、沃尔玛、阿里国际站选择什么样的测评方式最安全?
  • 【C语言】语法--联合体union详解
  • 接口测试复习
  • 获取医疗器械板块的个股列表
  • 1026 程序运行时间
  • 博途1200/1500 ALT指令
  • 11、视频分类建议
  • 【计算机组成原理】考研真题攻克与重点知识点剖析 - 第 2 篇:数据的表示和运算
  • 使用maven框架搭建一个IDEA插件项目
  • 第二届全国高校计算机技能竞赛——C++赛道 题解
  • 八大排序源码(含优化)
  • 单调队列---数据结构与算法
  • 小程序如何使用自定义组件
  • 归并排序含非递归版
  • 项目进展(八)-编写代码,驱动ADS1285
  • 【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
  • docker 安装kafka
  • 容器内获得apiserver地址
  • linux服务端c++开发工具介绍(vscode版)
  • Linux常用命令大全
  • Python中取2023, 9, 1——2023, 10, 31的全部时间
  • 创建django文件
  • 全排列[中等]
  • mybatise-plus的id过长问题
  • 图示矩阵分解