MySql索引底层原理

目的:通过mysql获取数据,检索数据的原理来理解索引,以及如何利用好索引。

由于篇幅问题,可能会连载几篇文章。

从mysql获取一条数据说起:

我们知道,电脑的系统在获取数据的时候会旋转磁盘,然后移动磁头,然后将盘片对应部分的数据取出。

但mysql的数据在磁盘中的位置可能不一定是连续,这样进行一次访问可能花费的开销比我们想想的要大很多,

所以我们想要提高查找速度,就一定要找一个其他方法提高检索速度(索引)。

正常索引结构都会有很多种:B-tree,Hash,位图索引等等。

前提说明:图中每个圆代表索引的1块内存区域。所以每访问一个圆(索引节点)都会产生一次IO。

因此产生的弊端:在磁头达到目标数据之前,每经过一个节点,都要产生一次IO,所以数据量增大时,节点的数量会逐渐增加。

就会使得IO次数增加。

红黑树在查找方面有所改观,每增加一个节点的同时,会经过一次平衡算法,将节点尽量分散开,

尽可能的减小红黑树的单边过于冗长。但随着数据量的增加也一样会使IO次数增加。

为了解决这个问题:mysql推出了优于前两种的(没有绝对的优)B+tree。

为了减少IO次数,mysql将一个Index的内存区域扩大成可以容纳n个根节点的大小(橘黄色区域)。

就是我们所熟知的B+Tree。

猜你喜欢

转载自www.cnblogs.com/zwk-It-goodmorning/p/11258291.html