前言
mysql索引是什么有哪些索引,如果随便找一个人都会说出几点出来,但是,
索引的原理和目的是什么,建立索引需要注意什么?
当时设计者是遇到什么困难要创建这些索引?
这些索引在磁盘上是怎么是怎么io操作的,怎么预读的?
索引的底层数据结构是啥?
…
我想估计很多人在面对面试官咄咄逼人的问题是不是直冒冷汗!!
为了吊打面试官,让我们一起来一步一步的来慢慢深入了解下去吧~~
索引是什么,为什么要有索引
索引呢其实就是一个键值,是数据库引擎中一个重要的查找数据的一个数据类型,形象点说就相当于我们字典里面的音序表,各位想象一下如果没有音序表,我们查找一个字典里面的数据是不是特别困难需要一页一页的查找特别费事费力,这个时候呢音序表就起了特别大的作用,其实也就是索引的闪亮登场。索引当然也不是越多越好,使用不当就会导致反效果,就想词典音序表一样,如果瞎使用音字节,不按一定规律和特性来,倒会适得其反,得不偿失。
磁盘的io操作和预读
我们都知道磁盘读取数据的时候,每次花费的时间可以分为3部分
平均寻道时间 平均旋转延迟 数据传输时间
-
平均寻道时间:一般指的是磁头移动到指定的磁道需要的时间,一般硬盘的平均寻道时间在7.5~ 14ms。
-
平均旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,就是我们经常说的磁盘转速,一般一个磁盘的转速为7200r/min,每个磁道有160个扇区,每个扇区有512B,大概现在的磁盘都是这样的速度和分配 平均旋转延迟就是60×1000÷7200÷2(平均情况下,需要旋 转半圈) = 4.17ms
-
数据传输时间:完成传输所请求的数据所需要的时间。一般都在零点几毫秒可以忽略不计
那么我们算下数据的总花费时间
总花费时间 = 平均寻道时间 + 平均旋转延迟 + 数据传输时间(忽略不计)
9.17ms = 7.5ms + 4.17ms
今天先写到这明天在继续~~太晚了