mysql索引的数据结构(Innodb)

首选要注意,这里的数据结构是存储在硬盘上的数据结构,不是内存中的数据结构,要重点考虑io次数.

一.不适合的数据结构:

1.Hash:不适合进行范围查询和模糊匹配查询.(有些数据库索引会使用Hash,但是只能精准匹配)

2.红黑树:可以范围查询和模糊匹配,但是和硬盘io次数比较多.

二.为数据库量身打造的数据结构(B+树):

1.B树(又称B-树):

a)本质上是N叉搜索树:一个节点保存多个key,N个key延展出N+1个节点(划分出N+1个区间).

从根节点出发,依次往下查找.

b)相较红黑树的优点:每个节点都可以存放多个元素,当总的元素个数确定的时候,节点数大大降低了,树的高度也降低了,查询时io次数减少了,查询效率提高了.

c)拆分和合并:在进行插入和删除元素的时候,一个节点可以存多个元素,但也不能没有限制的存,当达到一定数量的时候,就要把这个节点拆分,把这个节点中的一部分元素以数的子节点的方式来进行重新组织.

2.B+树:

特点:

a)N叉搜索树,但是N个元素分出N个区间节点最后一个元素就是最大值.

b)父节点的元素在子节点中重复出现(以最大值的身份).,叶子节点这一层,包含了所有元素.

c)叶子节点按照双向链表的方式,收尾相连,快速地找到上一个/下一个元素,方便范围查询.

优势:

a)特别擅长范围查询.

b)所有的查询最终会落到叶子节点,比较次数均衡,查询时间稳定.

c) 由于叶子节点上是完整的元素全集,因此表的每一行元素的其他列,都可以保存到叶子节点上,而非叶子节点,指存储构件索引的id就可以了.因此,非叶子节点的存储空间消耗非常小,可以在内存中缓存一份,这样减少了硬盘io次数,提高了查询效率.

相关推荐
李广坤16 小时前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12022 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
琢磨先生David3 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
百锦再3 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5