当前位置: 首页 > news >正文

面试tips--MySQLRedis--Redis 有序集合用跳表不用B+树 MySQL用B+树作为存储引擎不用跳表:原因如下

一、Redis的有序集合为什么使用 跳表 而不是 B+ 树

  1. 实现简单,内存友好

    • 跳表是基于链表 + 多级索引实现的,逻辑简单,代码量少,容易维护。

    • Redis 的数据大多放在内存中,不需要像 B+ 树那样考虑磁盘 IO 的分层读取。

  2. 范围查询更自然

    • 跳表通过多级索引快速定位,然后像链表一样向后遍历,非常适合区间查找。

    • Redis 的 有序集合 (Sorted Set, zset) 正是基于 跳表 + 哈希表 实现的。

    • 比如 ZRANGE score 100 200,用跳表可以顺序扫,很高效。

  3. 更新(插入/删除)更快

    • 跳表的插入/删除只需要修改相邻节点指针,平均复杂度 O(log n),实现简单。

    • B+ 树插入/删除可能触发节点分裂/合并,代码复杂,开销更大。

  4. 内存访问更高效

    • 跳表是链表结构,节点分布更灵活,避免了频繁的树旋转或分裂操作。

    • Redis 运行在内存,随机访问代价低,不需要像磁盘存储那样追求树的高扇出特性。

👉 总结:
Redis 选择跳表是因为它简单、高效、适合内存操作,且范围查询支持非常自然。


二、MySQL 为什么使用 B+ 树 而不是 跳表

  1. 磁盘 IO 优化

    • MySQL 数据量通常非常大,无法全部放入内存,必须依赖磁盘。

    • B+ 树的每个节点可以存放多个键值(扇出高),高度低(一般 3~4 层就能存下上亿数据)。

    • 查找数据时,磁盘访问次数非常少,大幅减少 IO。

  2. 顺序遍历高效

    • B+ 树的叶子节点是 链表连接 的,天然支持范围查询。

    • 在磁盘上,B+ 树叶子节点通常是连续存储的,顺序读比跳表的随机指针跳转更高效。

  3. 更新时的平衡性

    • B+ 树在插入/删除时通过分裂/合并保持平衡,保证了查询效率的稳定。

    • 跳表在磁盘环境下不如 B+ 树稳定(随机访问磁盘比顺序访问代价大很多)。

  4. 更适合大数据量存储

    • 跳表是链表结构,节点分散,磁盘存储会产生大量随机 IO。

    • B+ 树节点利用率高、层数少,非常适合海量数据存储。

👉 总结:
MySQL 选择 B+ 树是因为它能最大限度减少磁盘 IO,且支持高效的范围查询,非常适合大规模持久化存储。


三、总结对比表

特性跳表 (Redis)B+ 树 (MySQL)
存储环境内存磁盘
实现复杂度简单复杂
查询复杂度O(log n)O(log n)
范围查询高效(链表顺序遍历)高效(叶子链表 + 磁盘顺序读)
插入/删除快速,指针调整即可可能分裂/合并,开销大
内存/磁盘友好内存友好,指针操作快磁盘友好,减少 IO
应用场景Redis 有序集合(zset)MySQL 索引(B+ 树索引)

一句话记忆

  • Redis 用跳表 → 追求内存效率、插入删除简单、范围查询自然。

  • MySQL 用 B+ 树 → 追求磁盘效率、减少 IO、适合大数据量存储。

http://www.dtcms.com/a/362603.html

相关文章:

  • 278-基于Django的协同过滤旅游推荐系统
  • 详解Grafana k6 的阈值(Thresholds)
  • os.path:平台独立的文件名管理
  • sql执行过程
  • Tomcat 全面指南:从目录结构到应用部署与高级配置
  • Java-Spring入门指南(一)Spring简介
  • WPF曲线自定义控件 - CurveHelper
  • 大模型是如何“学会”思考的?——从预训练到推理的全过程揭秘
  • 【完整源码+数据集+部署教程】PHC桩实例分割系统源码和数据集:改进yolo11-Faster-EMA
  • 无需服务器,免费、快捷的一键部署前端 vue React代码--PinMe
  • 搭建分布式Hadoop集群[2025] 实战笔记
  • 【golang长途旅行第36站】golang操作Redis
  • 【自记】Python 中 简化装饰器使用的便捷写法语法糖(Syntactic Sugar)示例
  • ARM汇编记忆
  • 【53页PPT】华为制造行业数字化转型工业互联网智能制造解决方案(附下载方式)
  • MySQL事务+MVCC(精简版,包教包废)
  • 2025华为最值得入的耳机,真的赢麻了!
  • 结构抗震与土木工程研究
  • SylixOS 下的信号系统
  • Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • Chrome浏览器调用ActiveX控件之allWebOffice在线编辑控件
  • JD潜在前端二面高频题解析
  • mysql5.6+分页时使用 limit+order by 会出现数据重复问题
  • 蓝桥杯算法之基础知识(5)
  • 基于Spark的新冠肺炎疫情实时监控系统_django+spider
  • 数据结构与算法个人学习代码笔记包含leetcode,海贼oj,蓝桥杯,ACM
  • 华为Fit4:腕间助手,守护你的健康,带你开启智慧生活
  • 【字节拥抱开源】 UXO 团队开源 USO: 通过解耦与奖励学习实现的统一风格与主题驱动生成
  • 2025最新“Java 面试八股文 + 各大厂的面试真题”限时开源
  • 美团 LongCat 开源大模型60 亿参数 MoE 架构,赋能开发者加速 AI 应用落地