MySQL 高频面试题 - 为什么 B+ 树比 B 树更适合应用于数据库索引?

本文探讨了为何B+树而非B树常用于数据库索引。通过二分查找、二叉查找树、AVL树的概念引入,详细解释了B树和B+树的特性,尤其是B+树的叶子节点链表设计如何优化范围查询和减少磁盘I/O。B+树在存储和查询效率上的优势使其成为数据库索引的理想选择。
摘要由CSDN通过智能技术生成

为ä»ä¹ B+ æ æ¯ B æ æ´éååºç¨äºæ°æ®åºç´¢å¼ï¼

你可能已经知道 B+ 树被用于 MySQL 的索引底层实现,那么,为什么是 B+ 树呢?本文由浅及深,带你探索数据库索引底层实现。

为什么 B+ 树比 B 树更适合应用于数据库索引?

由一个例子总结索引的特点

加索引是数据库加速查询的一种方式,那么为什么用索引可以加快查询呢?

讲到索引,其实我们经常会听到一个图书馆的例子,图书馆里的书目繁杂,我们如何从若干本书里面找到一本我们想要的书呢?

我们根据图书馆系统检索,可以找到某本书对应的图书编号。

在基于书籍按照一定规则排列的前提下,我们可以根据图书编号找到这本书。

例如,假设图书编号根据:

第几个书架 - 书架上第几个格子 - 从左到右数第几个位置

这样的规则编排,

我们就可以轻松的获取到我们想要的书籍。

你也许发现了,这个例子中,藏着两个信息:

1:按照一定的规则排列:

2:有序

按照一定的规则,建立一定的映射关系,这让你联想到了什么?

没错,就是哈希表。

基于哈希表实现的哈希索引

在 Mysql 的 InnoDB 引擎中,自适应哈希索引就是用哈希表实现的。

哈希索引是数据库自身创建并使用的,DBA 本身不能对其进行干预,但是可以通过参数来禁止或者启用此特性。

显然用哈希表实现索引的好处是非常明显的,查找单个指定数据只需要 O(1)O(1) 的时间复杂度。

例如下面的 sql 语句:

select id from tablename where id == 1;

但是对于这种查找指定范围的 sql 语句,哈希索引就无能为力了。

select id from tablename where id BETWEEN 20 AND 23;

说明:因为哈希表本身是无序的,所以不利于范围查询

再次思考

到这里我们遇到了一个问题,就是哈希表虽然从查找效率上满足了我们查找单个数据的要求,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值