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

寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述MySQL—— 数据库索引 (索引是什么?B树,B+树)相关的知识,希望能为你提供帮助。
【MySQL—— 数据库索引 (索引是什么(B树,B+树))】@TOC
索引 1.什么是数据库索引? 1.1 概念

  • 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
索引(index)可以说是一本书的目录(index)。【两者的英文是同一个只是表现的形式不一样。】
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

1.2 作用1.3 使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
1.4 索引的优缺点1.5 如何使用
  • 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。
查看索引
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

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

文章图片

注意:
删除某个表中的索引
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

删除索引操作和创建同理,都是非常低效的事情,也容易让数据库挂了
2.索引的数据结构是什么? 2.1 可以是二叉搜索树或者红黑树吗?
  • 不可以
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

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

文章图片

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

文章图片

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

文章图片

与B-树相比的差异:
因为B树 是 B+树的前身,那么B+树想对比B树又做出了那些改变?
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

疑问:为什么B+树这么去构建?
例如:
找到 大于等于5,且小于等于 11 的值。
MySQL—— 数据库索引 (索引是什么(B树,B+树))

文章图片

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

文章图片

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

文章图片


    推荐阅读