索引
是帮助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是非聚集索引.
网友评论