索引是什么,索引的数据结构.B树,B+树

Posted 只yao为你发光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引是什么,索引的数据结构.B树,B+树相关的知识,希望对你有一定的参考价值。

文章目录


一、索引是什么?

  1. 通俗来说,索引就像一本书的目录,它可以帮助你快速的找到你想要了解的内容.
  2. 官方解释是索引是帮助mysql更高效的获取数据的数据结构
  3. 常见的索引分为:
    a)主键索引(primary key)
    b)唯一索引(unique)
    c)普通索引(index)
    d)全文索引(fulltext)–解决中子文索引问题

二、索引要解决的问题

1.快速取数据
2.保证数据记录的唯一性
3.实现表与表之间的参照完整性
4.在使用order by,group by子句进行数据检索时,利用索引可以减少排序和分组的时间

三、索引的应用场景

查询字段多的地方,数据量非常大的地方

四、索引的数据结构[B+树]

索引的数据结构是B+树,下面会先介绍B-树,再介绍B+树

1.为什么不用哈希表?

哈希表的优点是查询某个元素的时间复杂度近似为O(1),但是如果对哈希表进行范围查找只能遍历全表,这样的速度肯定不能满足数据量大的数据库.

2.为什么不用二叉搜索树?

a) 二叉搜索树对于根节点的选取有很高的要求,根节点选取不好会大大影响查询效率,即使选取好了是一个满二叉树,他的查询效率跟树的深度有关,当数据量大树的深度深的时候,查询速度也会很慢(1百万的数据量,log2n约等于20次磁盘IO,时间20*10=0.2s).

b)二叉搜索树对于HASH表来说查询范围效果更好 ,但是他需要从根节点进行多次遍历,查询效率也不高.

3. 什么是B-树?(这里不是B减树,而是B 树 )


B树是一种多叉平衡树,其有点是每一层多个分叉,但是每个分叉之间又存在连系,每个节点都包含键值和数据,数据按照键值大小排列.
B树每个节点存储数据,如果将B树存到内存中会占用很大的内存空间.
同样的B-树也不满足针对范围的快速查找,所以在此基础上引入了一种新的树,B+树.

4.什么是B+树?

B+树是MySql对于数据存储使用的数据结构

B+树的特点:
a)只有叶子节点存储数据
b) 非叶子节点存储键值
c)叶子节点采用链式存储结构
B+树的优点:由于B+树的叶子节点存储了所有数据并且按照键值有序进行链式存储,当通过满足排序树的键值查找到对应叶子节点,就可以通过链表来查询相应范围,大大提高了查询速度,并且可以将只存储键值的B+树存储在内存中,将数据存储在磁盘中,可以大大减少内存的空间占用.B+树的深度也比二叉树的深度小很多,进行查找是效率也会高出很多.

五 、在建索引时应遵循什么样的原则?

遵循的原则:
1,需要经常进行搜索的列
2,作为主键的列,该列的查找具有唯一性
3,作为外键的列,加快表与表的连接速度
4,经常需要进行范围搜索的列
5,经常使用在where子句中的列上面创建索引,加快条件的判断速度
不应该创建索引的列:
1,查询中很少使用的列
2,很少数据值的列

以上是关于索引是什么,索引的数据结构.B树,B+树的主要内容,如果未能解决你的问题,请参考以下文章

索引是什么,索引的数据结构.B树,B+树

B+树索引是啥?

MySQL—— 数据库索引 (索引是什么?B树,B+树)

为啥MongoDB采用B树索引,而Mysql用B+树做索引

为什么B+树适合作为索引的结构

MySQLMySQL的索引结构为什么使用B+树?