B+树是MySql数据结构的主流存储方式,包括InnoDB和MYISAM引擎,它们的默认存储结构都是B+树
了解B+树前,我们先要知道MySql的实际存储位置在哪?
有人会说它存在我么的D盘或C盘的MySql文件夹的Data目录里,这个回答没错,我们在深入的了解一下呢?
不管是在个人电脑上使用本机MySql或者在互联网上把信息存在服务器上,其实它们最终的存储地址都是被写在了物理磁盘上,只有存在物理磁盘上,才能保证数据长久不丢失
物理磁盘一般可以描述为:柱面,磁面,扇区,通过这三个参数可以精准定位到数据所在的地方
我们来看看一个普通的磁面:我们可以看到这个磁面上记录着磁道和扇区,
一般磁盘定位有固定头和移动头两种:
固定头每个磁道上都有一个读写头,造价高,但是读写速度快,定位时间短
移动头每个磁面上一个读写头,造价适中,读写速度主要取决于定位时间,从定位磁道,再到定位扇区所化的时间,现行的物理磁盘大多都是使用的移动头定位
我们在了解了我们的磁盘和移动头后,我们就需要了解一次物理磁盘的I/O,它指的是对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘I/O,磁盘的IOPS就是每秒磁盘连续读次数和连续写次数之和。
我们这里就把他当作读写一次扇区,即一次I/O只读写一个扇区(实际上的I/O指的是根据查询的数据大小,可能会连续读写好几个或者几百个扇区,但是也只进行了一次I/O,因为I/O读写的时间开销最大的还是在移动头的定位时间上)
一个扇区的大小比较公认的是字节(后面慢慢发展的也有一个扇区字节的,我们这里就举例字节)
我们先简单的看一个数据表,数据在扇区上是怎么存储的:这里我们定义了一张表,还有里面的数据,他有三个属性:id8字节,name40字节,no16字节
由此我们可以推出:这张表的一条记录就是8+40+16=64字节,我们这会儿定义的这张表的一条记录就要占64字节
一个扇区字节:/64=8
所以一个扇区就只能装8条记录,我们这32条记录就需要32/8=4,就需要4个扇区去装入,
如果我们按照规定的一次I/O读写一个扇区,那我们要找到32这条记录的话需要4次I/O操作,4次还算一般性能,但是我们在大型的数据库存储一张表可不止32条记录哦
但我们简单的把记录加到条的时候:/8=,也就是需要个扇区来装入,那我们要查找第条记录的时候就需要次I/O操作,显然这样的I/O操作就太慢了,要是有0个人需要查找,时间开销就很大了
这种情况我们就需要引入索引;B+树的根节点几乎全是索引