寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述MySQL—— 数据库索引 (索引是什么?B树,B+树)相关的知识,希望能为你提供帮助。
【MySQL—— 数据库索引 (索引是什么(B树,B+树))】@TOC
索引
1.什么是数据库索引?
1.1 概念
- 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
文章图片
1.2 作用1.3 使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
1.4 索引的优缺点1.5 如何使用
- 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。
文章图片
创建索引
文章图片
注意:
删除某个表中的索引
文章图片
删除索引操作和创建同理,都是非常低效的事情,也容易让数据库挂了
2.索引的数据结构是什么? 2.1 可以是二叉搜索树或者红黑树吗?
不可以
文章图片
2.2 可以是哈希表吗?
不可以
- 如果是处理相等情况,哈希表很高效
- 但是
哈希表不可以处理其他逻辑,比如范围查找
> > = < < = between and - 因为哈希的查找是把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次数几乎就为零了)
文章图片
总结
文章图片
推荐阅读
- TCP/IP协议之四TCP协议(上)—理论+实践给你讲清楚
- MySQL——事务 (特性 与 并发编程带来的问题)
- Redis 内存优化在 vivo 的探索与实践
- 深入源码聊聊RocketMQ的刷盘机制
- C语言关键字
- RxJS Map 操作符四大天王
- [ 数据结构 - C语言] 带你一篇了解 顺序表
- 跨域分析以及通解
- QCustomPlot开发笔记(QCustomPlot用户交互元素项以及特殊用法)