Mysql索引为什么用B+树而不用hash或者是红黑树

首先要知道什么是B+树,什么是hash,什么是红黑树;

      二叉树我们都了解,一个节点的左键点小于该节点,右节点大于该节点,但是如果插入二叉树的数据是有序的,就会形成二叉树的极端情况,形成链表,我们知道树的查询复杂度跟树的高度有关,树越高,那么查询事件复杂度就越高,并且需要更多的磁盘IO,所以需要通过某种约束来保证树的平衡,

        那么红黑树就是平衡二叉树中的一种,它通过一系列的规则来保证树的平衡。但是在大规模数据存储的时候,红黑树常常会因为树的深度过高而导致磁盘IO读写过于频繁,导致效率底下,为什么会形成这种情况呢,我们知道要获取磁盘上的数据,必须通过磁盘移动臂移动到数据所在的柱面,然后找到指定盘面,接着旋转盘面找到数据所在的磁道,最后进行读写,这种涉及到物理操作情况下,性能自然会很低下。

       B树也就是B-树,B树是一个多路搜索树,也就是每个节点可以有多个子节点,这样是为了降低树的高度,减少磁盘IO次数

      B+树是B树的优化,他的子节点只存储键而不存储数据,数据全部存在叶子节点,并且叶子节点间通过指针进行连接,这样因为子节点不存储数据,那么磁盘可以一次读取更多的子节点,减少IO次数,并且叶子节点想通,如果想查询10-100的数据只需要找到头尾就可以了。

      到此为止,我们知道了Mysql为什么使用B+树了,因为我们平常的业务查询一般可能不是查询一条,而是查询多条,hash索引查询单条确实比较快,但是他是无序的,查询多条或者排序的话性能就比较低了,并且在内存资源紧张的情况下,树索引可以分批装入内存进行计算。红黑树因为大数据存储下,树的高度很高,这样可能会导致多次IO,查询效率比较低。而B+树可以一次性装入更多的叶子节点到内存,并且树的高度可以控制到很低,叶子节点存储数据并且形成链表可以避免跨层查询。

 

myslq的加锁都和索引有着莫大的关系,如果走索引,则是行锁或者是间隙锁,如果不走索引,则是表锁

首先我们知道如果没有建立索引的话我们在进行数据选取或者定位的时候是通过全表扫描的形式来进行的,这样就会形成表锁,要是有索引的话就会直接定位到指定的行,就是形成行锁,但是要注意你在更新数据是假如没用到索引也会全表扫描,当扫到被锁的这一行是也会被锁住,所以达不到想要的效果

,

你可能感兴趣的:(mysql,mysql索引,b+树,红黑树)