InnoDB 为什么设计 B+ 树索引?
1 个回答
没觉得一年比一年自由,但确实一年比一年通透。胡列娜InnoDB 选择 B+ 树索引的主要原因有以下两个: 1. **场景需求与查询性能**:InnoDB 需要在复杂查询(如范围查询、排序查询)中拥有较强的性能。B+ 树可以高效支持这些操作,而哈希索引虽查询复杂度为 O(1),但不支持范围查询和排序,最终可能导致全表扫描,性能较差。 2. **磁盘访问效率**:磁盘访问(尤其是随机 I/O)的代价较高,而 B+ 树的叶节点通过指针连接,可以减少顺序遍历时的随机 I/O,从而提高性能。相比 B 树,B+ 树将数据存储在叶子节点,非叶节点只存储索引,减少了查询连续数据时的随机 I/O。 ### 为什么选择 B+ 树而非哈希或 B 树: - **哈希索引**:虽然查询速度快,但不支持范围查询和排序,无法满足数据库常见的查询需求。 - **B 树**:虽然可以存储数据在非叶子节点,但范围查询时会带来更多随机 I/O,影响性能。 - **B+ 树**:叶节点通过指针相连,顺序遍历效率高,支持范围查询和排序,适合数据库的常见场景。 ### 普通索引 vs 唯一索引: - **普通索引**:建议优先使用普通索引,因为它可以利用 InnoDB 的 **change buffer** 机制进行优化,提升插入、更新性能。 - **唯一索引**:不能使用 change buffer,性能相对较低。如果业务允许非唯一性,建议选择普通索引以获得更好的性能。发布于 2024-09-04 05:09 •IP属地 安徽举报评论收藏
公众号进入网站体验更佳

