通常,索引本身很大,不能完全存储在内存中,因此索引通常作为索引文件存储在磁盘上。在这种情况下,在索引查找过程中会生成磁盘I/O消耗。
I/O访问消耗比内存访问高几个数量级,因此将数据结构评估为索引的最重要指标是查找过程中磁盘I/O操作数量的渐进复杂性。换句话说,索引的结构被组织为最小化查找过程期间的磁盘I/O访问的数量。

MySQL——索引存储在磁盘上

磁盘由相同大小和同轴的圆盘组成,磁盘可以旋转(每个磁盘必须同步旋转)。在磁盘的一侧有一个磁头固定器,磁头固定器固定一组磁头,每个磁头负责访问一个磁盘的内容。头部不能旋转,但它可以沿着盘的半径移动(实际上是倾斜的切向运动)。每个磁头也必须同时同轴,也就是说,从右上方向下,所有磁头在任何时候都会重叠(但目前,有多种磁头独立技术,不受此限制)。

MySQL——索引存储在磁盘上

磁盘结构

磁盘操作:

寻求:头部连接到传动臂的一端。通过沿着半径轴来回移动执行器臂,驱动器可以将头部定位到任何轨道(光盘不移动,头部移动)

旋转:一旦定位了轨道,盘就会旋转,轨道上的每个位都会通过头部。读/写头可以检测该位的值,或修改该值(磁头不移动,磁盘移动)

磁盘存储概念:

扇区:每个同心环称为扇区,扇区是磁盘的最小存储单元。当需要从磁盘读取数据时,系统会将数据的逻辑地址传输到磁盘。盘的控制电路根据寻址逻辑将逻辑地址转换为物理地址,即,哪个轨道和要读取的数据是哪个扇区。为了读取该部门的数据,需要将头部置于该部门之上。为了实现这一点,头部需要移动并对准相应的轨道。这个过程称为搜索,花费的时间称为搜索时间;然后磁盘旋转将目标扇区旋转到磁头下方,此过程所需的时间称为旋转时间。

Page:由于存储介质的特性,磁盘本身的访问速度远远低于主存储器。除机械机芯外,磁盘的访问速度通常是主存储器的百分之几。因此,为了提高效率,尽量提高效率。减少磁盘I/O.为了实现这一目标,磁盘不是严格按需读取的,但每次预读时,即使只需要一个字节,磁盘也会从这个位置开始,并向后读取一定长度的数据。记忆。预读可以提高I/O效率。预读的长度通常是页面的整数倍(页面:计算机管理存储器的逻辑块
-
通常为4k)。主存储器和磁盘以页为单位交换数据。当程序要读取的数据不在主存储器中时,将触发页面错误异常。此时,系统将向磁盘发出读信号,磁盘将找到数据的起始位置并连续向后读取一个或几个页面。加载在内存中。地方原则

这样做的理论基础是计算机科学中着名的地方性原则:

当使用一个数据时,通常立即使用其附近的数据。

也就是说,程序运行期间所需的数据通常是集中的。由于磁盘的顺序读取非常有效(不需要寻道时间,只需要少量的旋转时间),因此对于具有局部性的程序,预读可以提高I/O效率。

文件系统和数据库系统的设计者利用磁盘预读的原理将节点的大小设置为等于一页,这样每个节点只能完全加载一个I/O.为了实现这一目标,每次B +
Tree创建一个新节点时,它直接请求页面空间,从而确保节点物理存储在页面中,并且计算机存储分配是页面对齐的。实现节点只需要一个I/O.

上一篇: 没有了

下一篇: 没有了

分享到:

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信