美文网首页
MySQL 索引及B+树

MySQL 索引及B+树

作者: 攻城狮托马斯 | 来源:发表于2020-04-17 11:46 被阅读0次

    索引

    是帮助MySQL数据库高效获取数据的数据结构

    索引的优点:  增加数据检索速度

    时间: 创建和维护索引需要耗费时间, 索引需要被动态维护.

    空间: 索引需要占据物理空间

    如图,根据索引表,我们能很快地找出目标数据所在的位置,然而当我们修改数据时,我们则需要同时一层一层修改索引,因为可能会发生变化。

    B/B+树在数据库中的运用


    B树数据结构: 以磁盘块为节点.

    每个节点,都是一个磁盘块,中存入键值(指向数据),数据,指针(指向下一个节点,磁盘块)

    储存指针, 键值, 数据

    在磁盘块7中读取13的数据. 因为B-Tree中每个节点能储存较多的内容(和BVL比起来, 为一块磁盘大小), 因此, B树的储存层数减少了,并且缩小了节点个数,每次I/O都能取到内存数据,提高了查找效率。

    B+树的原理

    B+树只保存Flag和指针(扇出),所有的数据存放在叶子节点中。如下图, 左子树比flag小,右子树大于等于这个flag

    在B+树底层数据存储中,物理上是不连续的,但是通过指针是连续的。

    优点:读取内存只需要树的高度次IO操作.

    缺点: 在插入和删除数据导致页大小超过或者低于某个点的时候,需要分页,对页面进行分页或者合并

    Hash索引和B+树索引的区别

    首先, Hash的效率非常高,只要一次读取磁盘的操作,而B+树通常会有多次读取磁盘的操作。 

    然而缺点是,

    1.hash索引只能满足单个查询,满足In, = , >, < 等操作,但无法获取一个范围内的数据。

    2.并且Hash索引并不是有序的索引,所以在范围查找时,不具有优势。

    3.一旦发生Hash collision,则要遍历整一个Hash表

    4.Hash索引的hash是针对一整个表的,因此无法做联合索引。

    聚集索引和辅助索引的差别

    https://www.jianshu.com/p/fa8192853184

    辅助索引可能会存储主键id和某一个column的值,如果说需要查另一个column, 那么需要回表

    而覆盖索引不需要。

    InnoDB会出现回表,但是MyIsam不会出现回表,因为MyIsam是非聚集索引.

    相关文章

      网友评论

          本文标题:MySQL 索引及B+树

          本文链接:https://www.haomeiwen.com/subject/yibsvhtx.html