Database infrastructure image for MySQL topics
备战面试2026年4月6日
返回文章列表

事务

B+树与哈希索引的核心区别在于数据结构与适用查询类型。 B+树是平衡多叉树,支持范围查询和排序,适合磁盘存储的OLAP场景; 哈希通过哈希函数实现O(1)等值查询,但无法处理范围操作,常用于内存键值存储。

文章大纲

事务

隔离级别

如何防止脏读/幻读

  • 隔离级别上来讲
  • 锁机制上来来讲

索引

B+ 树索引 & 哈希索引

B+树与哈希索引的核心区别在于数据结构适用查询类型。 B+树是平衡多叉树,支持范围查询和排序,适合磁盘存储的OLAP场景; 哈希通过哈希函数实现O(1)等值查询,但无法处理范围操作,常用于内存键值存储。 两者在数据库中常协同使用,如InnoDB的自适应哈希优化热点查询。 选型需结合查询模式(等值/范围)、数据分布(键冲突率)及存储介质(磁盘/内存)综合评估

  • 查询性能角度来讲

    • 哈希索引的等值查询性能是 O(1),理论上最快
    • B+ 树索引的查询性能是 O(log n),但支持范围查询
    • 对于频繁的单点等值查询场景
      • 例如 Redis 中的键值存储,哈希索引表现更佳
      • MySQL Memory 引擎默认使用哈希索引就是看中其等值查询性能
  • 数据组织结构角度来讲

    • B+ 树是一种多路平衡查找树,有序存储数据
    • 哈希索引基于哈希表实现,无序存储数据
    • B+ 树的叶子节点包含所有数据并且通过链表连接
      • 这种结构使得 B+ 树天然支持范围扫描和排序操作
      • InnoDB 引擎的主键索引就是一个 B+ 树结构
  • 功能支持角度来讲

    • B+ 树索引支持全键值匹配、范围查询和前缀匹配
    • 哈希索引只支持等值查询,不支持排序和范围查询
    • B+ 树索引可用于实现 ORDER BY 和 GROUP BY 操作
      • 例如 SELECT * FROM user WHERE age > 20 ORDER BY id
      • 哈希索引无法利用索引完成排序,需要额外排序操作
  • 空间与维护开销来讲

    • 哈希索引结构简单,内存占用相对较小
    • B+ 树索引需要维护树的平衡性,占用空间较大
    • 当数据频繁变化时
      • B+ 树可能需要频繁的节点分裂和合并操作
      • 哈希索引可能面临哈希冲突和扩容问题,需要rehash
  • 实际应用选择来讲

    • 关系型数据库主流选择 B+ 树索引
      • MySQL InnoDB、PostgreSQL、Oracle 等都以 B+ 树为主
      • 适合复杂查询场景,支持范围条件和排序
    • NoSQL 数据库常用哈希索引
      • Redis、Memcached 等键值存储使用哈希索引
      • MongoDB 对于非主键索引使用 B 树,对 _id 使用哈希索引
    • 有些数据库支持同时使用两种索引类型
      • MySQL 的 Memory 引擎支持同时使用哈希索引和 B+ 树索引
      • PostgreSQL 允许创建 hash 和 btree 类型的索引

Continue Reading

关联文档推荐

查看全部

备战面试

sorted set

哨兵机制是保证 Redis 的高可用性 监测主节点是否存活 - 发现主节点挂了,会选举一个从节点切换成主节点 - 同时将新的主节点信息通知给其他从节点

备战面试

场景设计

设计一个抢红包系统 如何拆包 随机数 线性切割 二倍均值法

备战面试

进程 & 线程区别

上下级的关系来讲 - 进程是资源调度的基本单位 - 线程是程序执行的基本单位 - 进程跟线程是一对多的关系 - 比方启动一个 JVM 进程,至少会启动主线程/垃圾回收线程 资源共享&隔离的关系来讲 - 进程有自己独立的地址空间 - 线程之间是共享同个进程的地址空间 - 线程 a 出现非法操作,可能就会影响到同个进程下的其他线程