索引优化数据库(原理篇)

Posted xxxxxiaochuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引优化数据库(原理篇)相关的知识,希望对你有一定的参考价值。

技术图片

如图,这是一张有一百行数据的employee数据表。

假设每行占128Bytes,那么存入磁盘的时候,是怎么存储的呢?

磁盘由磁道和扇区组成,磁盘和扇区组成一个基本的存储单位,我们称之为“块”,块的存储空间一般默认为512Bytes。

技术图片

刚才的employee数据表有一百行,每行128Bytes,那么就要占用(100*128)/512 = 25个块。

如果我们想要查询某个员工的信息,比如查询名字为张三的员工,大约需要访问多少个块呢?

答案是:最少访问一个块,最多访问25个块。

我们在考虑问题的时候要做最坏的打算,所以这里我们认为是访问25个块。

我们知道,读取磁盘的时候,我们是需要旋转磁盘来确定其扇区,通过前后移动磁头来确定其磁道,这样就能定位到一个具体的块。

可以想象,这样的读取速度是很慢的,而且要读取很多个块,才能查找到一条信息,对于现在的大企业来说,信息可能不止我这里的100行,可能是上万行,十万行....那么怎样才能优化查询的速度呢?这里我们就引入了索引。

下图我们建立了一个索引,并且假设索引表的每行占16Bytes,那么索引表1需要存入1个块当中,索引表2需要存入(16*100)/512<4,所以要存入四个块当中。

技术图片

回到例子中,我们要查询的张三的employeeID=66,我们先查找索引表1,可以得到它在索引表2中的位置,进而就访问到了张三的信息所在的块。

这里,访问索引表1和索引表2各访问一次块,最后查找张三信息也访问了一次块,因此总共只访问了3次块。

并且这个访问块的次数是稳定的,不管查询哪条信息,都是3次。

所以我们可以看到,为数据表建立索引提升了查询速度。

在实际操作中,我们可以用B树或者B+树来实现这一操作。

这篇文章只是理论介绍,具体实操,不知道啥时候会做。。。

以上是关于索引优化数据库(原理篇)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库学习第九篇索引原理与慢查询优化

MySQL优化之索引原理

高并发之存储篇:关注下索引原理和优化吧!躲得过实践,躲不过面试官!

mysql学习第10篇:数据库之索引与慢查询优化

mysql优化篇(基于索引)

「MySQL高级篇」MySQL索引原理,设计原则