索引数据结构

什么叫索引

数据库中对数据排好序的一种数据结构;

mysql为什么需要使用B+树,而不用其他数据结构

为什么不用二叉树

因为二叉树左边的数可能比右边的树高很多,在极端的情况下有可能是全表扫描,比如下图查找5就是全表扫描;


二叉树

为什么不用hash

HASH的底层结构是数组加链表或者红黑树的结构,在查找数据的时候效率很高,但是不支持范围查询;

hash结构

为什么不使用平衡二叉树

因为数据量越大平衡二叉树的树高会越来越高,对查询的效率会有很大影响;


红黑树(平衡二叉树)

为什么不使用B树

B树的每个节点都存放了数据,而每个节点的长度也是固定的,这样就导致每个节点存放的数据量就变少了;而且当数据量太大时,就不会把索引加载到内存,这样只能访问每一个树节点下的磁盘地址,去比较该地址下的数据,会加剧IO的消耗;


每个节点存放数据的内存大小,16kb,可以修改(不建议)
B树

为什么使用B+树

B+树非叶子节点没有存放数据,而是存放的有内存地址;叶子节点存放有数据,而且每个叶子节点之间会有地址块存放双向链表;

在mysql服务器中会把非叶子几点的索引全部加载到内存中,一般B+树也不算太高,基本都是2-4,所以内存里面也不算太大;

在查找的时候可以通过折半查询可以快速定位数据,比如需要查询Id=8的数据,从根节点查找会快速定位在5-9之间,快速定位到7节点所在的物理地址,8>7,定位7所在节点右边的物理地址,依次类推可以很快找到8所在的位置;

B+树
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容