美文网首页
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