MySql索引底层原理(01)
目的:通过mysql获取数据,检索数据的原理来理解索引,以及如何利用好索引。
由于篇幅问题,可能会连载几篇文章。
从mysql获取一条数据说起:
我们知道,电脑的系统在获取数据的时候会旋转磁盘,然后移动磁头,然后将盘片对应部分的数据取出。
但mysql的数据在磁盘中的位置可能不一定是连续,这样进行一次访问可能花费的开销比我们想想的要大很多,
所以我们想要提高查找速度,就一定要找一个其他方法提高检索速度(索引)。
正常索引结构都会有很多种:B-tree,Hash,位图索引等等。
前提说明:图中每个圆代表索引的1块内存区域。所以每访问一个圆(索引节点)都会产生一次IO。
因此产生的弊端:在磁头达到目标数据之前,每经过一个节点,都要产生一次IO,所以数据量增大时,节点的数量会逐渐增加。
就会使得IO次数增加。
红黑树在查找方面有所改观,每增加一个节点的同时,会经过一次平衡算法,将节点尽量分散开,
尽可能的减小红黑树的单边过于冗长。但随着数据量的增加也一样会使IO次数增加。
为了解决这个问题:mysql推出了优于前两种的(没有绝对的优)B+tree。
为了减少IO次数,mysql将一个Index的内存区域扩大成可以容纳n个根节点的大小(橘黄色区域)。
就是我们所熟知的B+Tree。