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

Posted Perceus

tags:

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

@TOC


索引

1.什么是数据库索引?

1.1 概念

  • 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

索引(index)可以说是一本书的目录(index)。【两者的英文是同一个只是表现的形式不一样。】


1.2 作用


1.3 使用场景

要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:


1.4 索引的优缺点


1.5 如何使用

  • 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

查看索引


创建索引

注意:


删除某个表中的索引

删除索引操作和创建同理,都是非常低效的事情,也容易让数据库挂了


2.索引的数据结构是什么?

2.1 可以是二叉搜索树或者红黑树吗?

  • 不可以


2.2 可以是哈希表吗?

  • 不可以
  1. 如果是处理相等情况,哈希表很高效
  2. 但是哈希表不可以处理其他逻辑,比如范围查找 > >= < <= between and
  3. 因为哈希的查找是把key带入哈希函数得到下标,再根据下标取对应的链表,再去遍历链表比较key是否相等,无法进行范围查找


2.3 可以是B树吗?

  • 本质可以,但为了更高的效率不选它

B树与二叉树差异:

在整个数据量的条件一定的情况下,N叉搜索树的高度 一定比 二叉搜索树要低。
在数据库中使用的这个多叉树,又不太一样,是一个很特殊的树,我们称为 B+ 树。
【B+ 树 是 数据库中最常见的数据结构】
注意!数据库有很多种,每个数据库底层又支持多种存储引擎
这些存储引擎实现了数据库具体按照什么结构来存储的程序。
那么就意味着 每个存储引擎 存储数据的结构 可能都不一样,背后的索引数据结构可能也不同。
所以,这里面可能会有很多种多叉树来去表示这里的数据结构。
只是 B+ 树 是 最常用的一种数据结构。
那么,B+ 树 又是什么样子的?
想要 理解 B+ 树,需要先理解它的前身 B 树( B-树:这个是B树的另一种写法,而不是B减树)


2.4 可以是B+树吗?

与B-树相比的差异:

因为B树 是 B+树的前身,那么B+树想对比B树又做出了那些改变?

疑问:为什么B+树这么去构建?

例如:

找到 大于等于5,且小于等于 11 的值。

所有的数据存储(数据又称载荷)都是放到叶子结点上的。也就是说非叶子结点中只需要保存key值就可以了。因此非叶子节点整体占用空间较小,甚至可以加载到内存中。(一旦能够全部放在内存里,此时硬盘上的IO次数几乎就为零了)


总结


以上是关于MySQL—— 数据库索引 (索引是什么?B树,B+树)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql索引为什么用B+树而不用B-树

B+树索引是啥?

mysql索引为什么用B+树而不用B树

mysql索引为什么用B+树而不用B树

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

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