MYSQL索引的底层数据结构

MYSQL索引

啥是索引,为什么要用索引,怎么用,为什么要用

索引:就好像查字典一样,通过偏旁部首,声母韵母这种方式去查某个字,会让你的效率更高更快。

在mysql中,索引是一种数据结构,他的功能和查字典没啥两样,主要就是让数据检索的效率更快。

Mysql索引的数据结构的选择:

  1. 不是说hash查找的时间复杂度是o(1),为什么不使用哈希查找?

因为一般来说我们存储的数据都是范围的存储,数据的左右多少都是有点关系的,但是哈希查找不是这样的,他说通过计算哈希值,把每个数据放到某个位置去,他不支持范围查找数据的关联系比较弱。

  1. 为什么不使用二叉搜索数

因为最坏的情况下,二叉搜索树可能会退化成一个单分支的数,这个时候的二叉搜索树其实和单链表没啥区别了时间复杂度都是o(n),并且数据库的数据是保存在磁盘上的,也就是相当于每次访问一个数据都要发生一次磁盘oi(开关)。

  1. 为什么不使用N叉数(B树)

时间复杂度o(logn)

树的高度被有效控制,查询数据的次数变少了,数据库的效率也提升了,为什么不使用呢,是因为有更好的B+树

4为什么索引选择了使用B+树(面试题)

B+树,时间复杂度是o(logn);

仔细观察这个B+树和B树

这两棵树有什么区别吗?

  1. B+树的所有叶子节点之间相当于一个双向循环列表,通过其中的任意一个元素都能找到他的兄弟节点。
  2. 非叶子节点保存的只是对子节点的引用,所有的真实数据都保存在叶子节点中。
  3. B+树和B树,在树高都一样的情况下,查找任一元素都时间复杂度都一样,性能更加均衡。
相关推荐
程序员老舅2 小时前
啃透 I2C 驱动开发,才算入门嵌入式 Linux 内核驱动
数据结构·驱动开发·b树·内核·嵌入式·嵌入式开发·i2c
凌虚6 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪6 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善6 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql
赤壁小虾9 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客9 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
奈斯先生Vector10 小时前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney
青山木10 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Lethehong10 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客10 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python