B-tree与Mysql
来源:互联网 发布:普通pc安装mac系统 编辑:程序博客网 时间:2024/05/22 04:45
1、引言
Mysql默认使用B-tree作为索引的存储方式,设计数据表索引时我们会纠结选B-tree或hash,只有彻底理解了B-tree的数据结构,才能真正理解mysql索引的作用,在Mysql性能优化的时候才能正确分析
B-Tree:多列索引中,范围查询,会导致后面的列无序,因此右边的索引将不起作用
这个是索引优化的核心。
2、B-tree结构
B-tree:我们都知道平衡二叉树,每个节点最多两个子树,左边小于右边,叶子节点到根节点的距离,绝对值不会小于1,方便查询,
B-tree就是M叉平衡树,但是有几个特性,决定了这个M叉平衡树的特色
,先上图,看看什么是b_tree:
这是一个三叉平衡二叉树:
对于M叉平衡二叉树,有以下几点:
1、大小顺序:左中右
2、叶子节点到根节点的距离绝对值<=1
3、结点中最多有m个子树
4、每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,……,Kn,Pn)。
其中 ceil(m/2)<=n<=m-1. n代表节点保存的数据个数
比如:m=5时,2<=n<=4
下限是在删除数据时起约束作用,上限是在增加数据时起约束作用
特别提醒:mysql中不可能一个索引中的所有节点都存储在同一个数据块中,一般1k~4K就会换一个数据块,可以用下图看看
我们根据上面的几条准则,来增加一个索引和删除一个索引的过程:
就一点和我们的平衡二叉树不同,要分裂
当该节点的数据量达到上限m-1的时候,将数据放进去,形成m个数据,然后把最中间的数作父节点,往上新生成节点:如果父节点也满了,再次往上分裂
删除数据时,看下限,如果小于ceil(m/2)就往上合并
详见:http://www.2cto.com/database/201411/351106.html
- B-tree与Mysql
- B+ Tree 与 B- Tree
- B-Tree 与B+Tree
- Mysql B-Tree 索引
- mysql b-tree索引
- mysql b-tree索引
- MySQL中两种索引Hash与B-Tree的区别
- Mysql的Hash索引与B-Tree索引
- 详解 B-Tree 与B+Tree
- Mysql InnoDB B+Tree索引
- B-Tree B+Tree mysql索引(MyISAM,InnoDB)
- MySQL索引使用的数据结构:B-Tree和B+Tree
- 高性能Mysql:B-TREE和B+-TREE
- MySQL索引使用的数据结构:B-Tree和B+Tree
- MySQL索引使用的数据结构:B-Tree和B+Tree
- B-Tree / B+Tree 结构以及MySQL索引
- MyISAM,InnoDB与B+Tree
- 【数据结构与算法】B+ tree
- 在centos7下编译安装memcached
- 关于面试题中结构体内存对齐计算总结
- 563. Binary Tree Tilt
- linux awk命令详解
- 《Unity 3D游戏客户端基础框架》概述
- B-tree与Mysql
- 玲珑杯round18(数论)
- 秒杀多线程第三篇 原子操作 Interlocked系列函数
- SQL练习
- VSCode使用技巧
- 找出链表的倒数第K个结点
- iOS开发 各种小功能(开发宝典)
- MOOC清华《程序设计基础》第5章第2题:破损棋盘的八皇后问题
- python—装饰器