什么叫索引
数据库中对数据排好序的一种数据结构;
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+树