mysql面试题分享带答案

 数据库索引的原理,为什么要用B+树,为什么不用二叉树?

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?

为什么不是一般二叉树?

如果二叉树特殊化为一个链表,相当于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体的查找速度也更快。

为什么不是平衡二叉树呢?

我们知道,在内存比在磁盘的数据,查询效率快得多。如果树这种数据结构作为索引,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块,但是平衡二叉树可是每个节点只存储一个键值和数据的,如果是B树,可以存储更多的节点数据,树的高度也会降低,因此读取磁盘的次数就降下来啦,查询效率就快啦。

那为什么不是B树而是B+树呢?

1)B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。innodb中页的默认大小是16KB,如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的IO次数有会再次减少,数据查询的效率也会更快。

2)B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,链表连着的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。

相关推荐

  1. mysql面试分享答案

    2023-12-07 05:54:06       56 阅读
  2. MySQL 面试答案

    2023-12-07 05:54:06       19 阅读
  3. MySQL面试及其答案

    2023-12-07 05:54:06       50 阅读
  4. Hive窗口函数面试答案版本)

    2023-12-07 05:54:06       27 阅读
  5. 【大数据面试MySQL面试答案

    2023-12-07 05:54:06       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 05:54:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 05:54:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 05:54:06       82 阅读
  4. Python语言-面向对象

    2023-12-07 05:54:06       91 阅读

热门阅读

  1. 创建conan包-工具链

    2023-12-07 05:54:06       64 阅读
  2. 显示出所有留言信息,后期为了方便删记录用。

    2023-12-07 05:54:06       53 阅读
  3. 商业化产品经理常用的ChatGPT通用提示词模板

    2023-12-07 05:54:06       60 阅读
  4. 自然语言处理(NLP)技术-AI生成版

    2023-12-07 05:54:06       55 阅读
  5. linux firewalld简介

    2023-12-07 05:54:06       61 阅读