博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库索引为什么要用 B+ 树而不用红黑树呢?
阅读量:2352 次
发布时间:2019-05-10

本文共 401 字,大约阅读时间需要 1 分钟。

 

AVL 树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。

既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?

这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。

AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?

这就要牵扯到索引的存储原理了

页是 InnoDB存储引擎管理数据库的最小磁盘单位。

一个页中包括很多数据行。

那么,现在问题就来了

一个父节点只有 2 个子节点,并不能填满一个页上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树,让一个父节点有多个子节点就可以了。

由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!

所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。

 

 

 

 

 

转载地址:http://ykwtb.baihongyu.com/

你可能感兴趣的文章
pycharm不同测试框架的设置、unittest测试案例
查看>>
python unittest TestCase间共享数据(全局变量的使用)
查看>>
Python中普通字符串 & json字符串&json对象的区别
查看>>
python中json.dumps()和json.dump() 以及 json.loads()和json.load()的区分
查看>>
Python3中打开文件的方式(With open)
查看>>
python中unittest加载测试用例的4种方法
查看>>
iOS中使用RNCryptor对资源文件加密
查看>>
Device Tree编译工具dtc
查看>>
softlockup/hardlockup原理详细介绍
查看>>
项目管理学习笔记之八风险管理过程总结
查看>>
项目管理学习笔记之九采购管理过程总结
查看>>
solaris常用命令总结
查看>>
邮件安全证书(S/MIME),如何申请邮件证书
查看>>
Go语言基础入门--简介
查看>>
Go语言基础入门--变量,类型
查看>>
Go语言基础入门--数组,切片,map
查看>>
Go语言基础入门--if,for,range,switch
查看>>
Go语言基础入门--函数,错误处理
查看>>
VIM 学习系列之基本命令,常用命令
查看>>
轻松搭建安全、轻量、极速、简约的博客Eiblog
查看>>