深入理解Mysql索引底层数据结构与算法

本文介绍了MySQL索引的基本概念,详细分析了二叉查找树、红黑树、hash、B-Tree及B+Tree等索引数据结构的特点及其适用场景,并对比了MyISAM与InnoDB两种存储引擎的索引实现方式。

一、MySQL索引的介绍

1.1、索引:

(1)、索引是帮助MySQL高效获取数据的排好序的数据结构。索引存储在磁盘文件里,也就是说会有IO操作。

常用的索引数据结构:二叉查找树、红黑树、hash、B-Tree、B+Tree。

在以下的分析中,我会说明为什么MySQL会选择hash以及B+Tree作为索引的数据结构,而不是其他的几种数据结构。

二、磁盘的读写原理

(1)、硬盘的组成
在这里插入图片描述
所有的盘片都固定在一个主轴上,并且所有盘片之间是绝对平行的,在每个盘片的存储面上都有一个磁头,所有的磁头连在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向移动,每个磁头同一时刻也必须是同轴的,即从正上方向下看,所有磁头任何时候都是重叠的。而盘片以每分钟数千转到上万转的速度在高速旋转,这样的话磁头就能对盘片上的指定位置进行数据的读写操作。

(2)、硬盘的工作原理
硬盘在逻辑上被划分为磁道、柱面以及扇区。
在这里插入图片描述磁头靠近主轴接触的表面,即线速度最小的地方,是一个特殊的区域,它不存放任何数据,称为启停区,启停区外就是数据区。在最外圈,离主轴最远的地方是“0”磁道,硬盘数据的存放就是从最外圈开始的。那么,磁头是如何找到“0”磁道的位置的呢?在硬盘中还有一个叫“0”磁道检测器的构件,它是用来完成硬盘的初始定位。“0”磁道是如此的重要,以致很多硬盘仅仅因为“0”磁道损坏就报废,这是非常可惜的。
早期的硬盘在每次关机之前需要运行一个被称为Parking的程序,其作用是让磁头回到启停区。现代硬盘在设计上已摒弃了这个虽不复杂却很让人不愉快的小缺陷。硬盘不工作时,磁头停留在启停区,当需要从硬盘读写数据时,磁盘开始旋转。旋转速度达到额定的高速时,磁头就会因盘片旋转产生的气流而抬起, 这时磁头才向盘片存放数据的区域移动。
盘片旋转产生的气流相当强,足以使磁头托起,并与盘面保持一个微小的距离。这个距离越小,磁头读写数据的灵敏度就越高,当然对硬盘各部件的要求也越高。早期设计的磁盘驱动器使磁头保持在盘面上方几微米处飞行。稍后一些设计使磁头在盘面上的飞行高度降到约0.1μm~0.5μm,现在的水平已经达到 0.005μm~0.01μm,这只是人类头发直径的千分之一。
气流既能使磁头脱离开盘面,又能使它保持在离盘面足够近的地方,非常紧密地跟随着磁盘表面呈起伏运动,使磁头飞行处于严格受控状态。磁头必须飞行在盘面上方,而不是接触盘面,这种位置可避免擦伤磁性涂层,而更重要的是不让磁性涂层损伤磁头。但是,磁头也不能离盘面太远,否则,就不能使盘面达到足够强的磁化,难以读出盘

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值