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.hqwc.cn/news/125506.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&a…

【算法学习】-【双指针】-【盛水最多的容器】

LeetCode原题链接&#xff1a;盛水最多的容器 下面是题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。…

MySQL——使用mysqldump备份与恢复数据

目录 1.mysqldump简介 2.mysqldump备份数据 2.1 备份所有数据库 2.2 备份一个/多个数据库 2.3 备份指定库中的指定表 3.mysqldump恢复数据 3.1 恢复数据库 3.2 恢复数据表 1.mysqldump简介 mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中…

基于transformer的心脑血管心脏病疾病预测

视频讲解:基于transformer的心脑血管疾病预测 完整数据代码分享_哔哩哔哩_bilibili 数据展示: 完整代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np …

常见的锁策略

目录 一.乐观锁 vs 悲观锁 二.轻量级锁 vs 重量级锁 三.自旋锁 vs 挂起等待锁 四.互斥锁 vs 读写锁 五.可重入锁 vs不可重入锁 一.乐观锁 vs 悲观锁 悲观锁 : 总是假设最坏的情况&#xff0c;每次去拿数据的时候都认为别人会修改&#xff0c;所以每次在拿数据的时候都会上锁…

专题一:双指针【优选算法】

双指针应用场景&#xff1a; 数组划分、数组分块 目录 一、移动0 二、复写0 从后向前 三、快乐数 链表带环 四、盛水最多的容器 单调性双指针 五、有效三角形个数 单调性双指针 六、和为s的两个数字 七、三数之和 细节多 需再练 一、移动0 class Solution { public:void move…

项目进展(八)-编写代码,驱动ADS1285

一、代码 根据芯片的数据手册编写部分驱动&#xff0c;首先看部分引脚的波形&#xff1a; DRDY: CS&#xff1a; 首先在代码初始化时连续写入三个寄存器&#xff1a; void WriteReg(uint8_t startAddr, uint8_t *regData, uint8_t number) {uint8_t i0;// 循环写number1次…

Linux软硬连接与动静态库

硬链接 我们可以通过命令 ln myproc myproc-h 创建硬链接。 很容易发现 test&#xff08;源文件&#xff09; 和 mytest &#xff08;硬链接&#xff09;的文件大小是一样的&#xff0c;mytest的硬链接数从 1-> 2 通过 ls -i 文件名 我们还会发现&#xff0c;test 和 myte…

数学建模Matlab之数据预处理方法

本文综合代码来自文章http://t.csdnimg.cn/P5zOD 异常值与缺失值处理 %% 数据修复 % 判断缺失值和异常值并修复&#xff0c;顺便光滑噪音&#xff0c;渡边笔记 clc,clear;close all; x 0:0.06:10; y sin(x)0.2*rand(size(x)); y(22:34) NaN; % 模拟缺失值 y(89:95) 50;% 模…

Ros2 学习02- ubuntu22.04 安装ros2

设置镜像源 sudo vim /etc/apt/sources.list#阿里源 deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jamm…

linux下的永久保存行号

linux下的永久保存行号 1.首先 这里是引用 输入命令&#xff1a;vi ~/.vimrc 其次 这里是引用 输入命令 set number

Spring 体系架构模块和三大核心组件介绍

Spring架构图 模块介绍 1. Spring Core&#xff08;核心容器&#xff09;&#xff1a;提供了IOC,DI,Bean配置装载创建的核心实现。 spring-core &#xff1a;IOC和DI的基本实现 spring-beans&#xff1a;BeanFactory和Bean的装配管理(BeanFactory) spring-context&#xff1…