指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
myisam树索引查找,但范围查询必须中序遍历所有节点,不能顺序扫描,非常低效,原因是不是不能像b+树那样有链表结构?
1. B树(B-Tree)和 B+树(B+Tree)的区别
特点B树B+树
数据存储位置所有节点(包括内部节点和叶子节点)都存储数据只有叶子节点存储数据,内部节点只存储索引键
叶子节点连接叶子节点之间没有链表连接叶子节点通过链表相连,方便范围扫描
查找流程直接通过树查找,找到目标节点即可先通过索引找到对应叶子节点,再顺序遍历叶子链表
范围查询需要在树中中序遍历节点,效率较低利用叶子节点链表顺序遍历,高效

2. 为什么 B树范围查询效率低?
  • 数据散布在所有节点上(包括内部节点),没有统一的顺序链表。
  • 对范围查询,要找到起点后,接下来还得“跳”到其他节点,不能简单地顺序遍历叶子节点。
  • 如果进行中序遍历,要遍历树中所有节点(包括内部节点和叶子节点),访问磁盘多,效率低。
  • 没有叶子节点链表,不能快速顺序扫描。

3. B+树范围查询优势
  • 所有数据都存储在叶子节点,叶子节点之间通过链表连接。
  • 只要定位到范围起点的叶子节点,就能顺序沿着链表快速扫描范围内所有数据,减少磁盘随机读。
  • 内部节点只做索引导航,不存具体数据,树更高效且结构简单。

4. 结论
  • B树不能像 B+树一样有叶子节点链表,因此范围查询时必须中序遍历整个树节点,访问效率较低。
  • B+树的链表结构让范围查询成为顺序扫描,极大提升了性能。