btree高度mysql_如何知道btree树的高度
来自网络,总结到这里:
当我想看btree树高度的时候,筛选出来这篇文章"为什么 B-tree 在不同著作中度的定义有一定差别?",知道了高度的算法是这个公式:但是里面又提高t和出度有关系,那么这个出度怎么算呢?为此我又搜索到了这里:"B-/+Tree索引的性能分析", d越大索引的性能越好,而出度的上限取决于节点内key和data的大小:
dmax=floor(pagesize/(keysize+datasize+pointsize))
floor表示向下取整。
这篇文章也非常好,但是没有一个明确的方法告诉我innodb的高度怎么看,我被老大说中了,“现在是一个快餐时代”,我也不例外,直到我看到这里:
通过下面的SQL语句可以查出某这表对应索引的Root页:
SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NOFROMinformation_schema.INNODB_SYS_INDEXES a,
information_schema.INNODB_SYS_TABLES bWHERE a.table_id = b.table_id AND a.space <> 0;
或者:SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NOFROMinformation_schema.INNODB_SYS_INDEXES a,
information_schema.INNODB_SYS_TABLES bWHERE a.table_id = b.table_id AND a.space <> 0 and name='dbname\/tbname';
运行上述的SQL语句应该可以得到类似如下的结果:
其中(SPAE,PAGE_NO)就是索引的Root页。
关于上面的列都是什么意思?
有了这些信息就可以方便的定位啦,因为PAGE_LEVEL在每个页的偏移量64位置出,占用两个字节,通过hexdump这样的工具就可以快速定位到所需要的树高度信息:
root@test-1:~# hexdump -s 24640 -n 10 customer.ibd
00006040 00 02 00 00 00 00 00 00 00 47
查看customer表,24640表示的是3*8192+64(这里innodb_page_size,查看方法:
mysql -uroot -e"show global variables like 'innodb_page_size'";
设置为了8192,并非默认的16384),即第3个页偏移量64位置开始读取10个字节,但不是读取2个字节就可以了嘛?其实因为后面8个字节对应的是index_id,就是上图中看到的index为71的索引,这里PAGE_LEVEL为00 02,那么索引的高度就为3。
用同样的方法可以查看customer表中i_c_nationkey的索引高度:
root@test-1:~# hexdump -s 32832 -n 10customer.ibd00008040 00 01 00 00 00 00 00 00 00 48
可以发现PAGE_LEVEL为00 01,表示这棵二级索引树的高度为2。
虽然通常来说索引树的高度为3~4层,但是极端情况下,比如数据量超级大,页比较小,如4K,那么高度也是可能破4的。
参考来源:
https://dev.mysql.com/doc/refman/5.6/en/innodb-sys-indexes-table.html
btree高度mysql_如何知道btree树的高度相关推荐
- 关于数据结构树的高度从0还是1开始计算的思考
今天做到老师网课发布的一道题,让求树高h有多少个node,这应该是个挺简单的问题,但是重要的是树从0开始算,还是从1开始算.当时记得老师说的挺清楚的,但是没记笔记,时间长了,也忘了.网上查也是各种答案 ...
- 常见数据结构详细图解、树的高度、深度、层数、跳表、二叉搜索树、平衡二叉树、红黑树、B树、B+树
常见数据结构 常用的数据结构知识. 1.1 跳表 上图是一个有序链表,我们要检索一个数据就挨个遍历.如果想要再提升查询效率,可以变种为以下结构: 现在,我们要查询11,可以跳着来查询,从而加快查询速度 ...
- 推导B树的最大高度和最小高度得出B树的高度范围
前提条件:n>=1,则对于任意一棵包含n个关键字.高度为h.阶数为m的B树. 一.最小高度: 对于任意树类型的数据结构,如果其每层节点能够分布的足够满,其高度也会随之变得足够的低.基于这个思路, ...
- using b tree mysql_浅析MysQL B-Tree 索引
B-Tree 索引 不同的存储引擎也可能使用不同的存储结构,i如,NDB集群存储引擎内部实现使用了T-Tree结构存储这种索引,即使其名字是BTREE:InnoDB使用的是B+Tree. B-Tree ...
- 如何获取InnoDB树的高度
前言 作为DBA了解InnoDB的页组织方式是最基础的,在实际工作中,免不了会评估SQL会消耗多少IO,怎么评估呢? 作为InnoDB表和树的高度或者深度有关系. 查看树的高度? 之前研究了半天: h ...
- 是什么影响了MySQL索引B+树的高度?
hello,大家好,我是张张,「架构精进之路」公号作者. 提到MySQL,想必大多后端同学都不会陌生,提到B+树,想必还是有很大部分都知道InnoDB引擎的索引实现,利用了B+树的数据结构. 那Inn ...
- 求树的高度(C++)
题目描述 现给定一棵树,请你求出它的高度. 输入格式 输入给出二叉树的信息.对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号):随后N行,第i行对应 ...
- mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- 一个key 在10w k/v 找到对应的. (B-tree), 这10w放进B-tree 会有多少层.
B-tree是二叉平衡查找树,相邻两层节点层数不超过1 所有10w 即 2^16=65536 < 10w < 2^17=131072: 会有17层,最多查询17次. 转载于:https:/ ...
最新文章
- 详细的多维度测评,看看哪个 Python 版本速度最快!
- 算法之排列与组合算法
- spring AspectJ的Execution详解
- Windows下Caffe-SSD编译
- 美国服务器百度抓取耗时不稳定,百度或者其他搜索引擎抓取频次快慢的因素,还会受什么有影响?...
- C++题解-Leecode 375. 猜数字大小 II——Leecode每日一题系列
- php按钮css样式,CSS 按钮
- react(88)--ant design控制inputNumber设置正整数
- [转一下]未来卫星通信发展趋势
- 滑动平均_善杰告诉您初中物理学滑动变阻器的各种作用
- 【职场攻略】比你的工资更重要的十件事
- 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
- dispatcherServlet源码分析之doDispatch
- android怎么执行命令,Android程序中执行adb命令
- 局域网查共享计算机的ip地址吗,如何查看电脑的内网IP地址?
- df.to_csv输出结果隔行多一个空行的解决办法
- 三维GIS视频融合监控平台
- java win7 管理员权限_win7系统一键取得管理员权限的操作方法
- 新人如何利用今日头条自媒体平台赚钱?月收入轻松过万
- VS2008向工具箱中添加控件解决 未能实例化 设计时授权
热门文章
- Python中 单引号,双引号和三引号的区别
- MAC-安装与破解WebStorm(rn开发工具)
- 临床医学专业计算机必须过几级,临床、金融、计算机电子信息,这些专业过去现在未来都是大热门...
- 大数据时代农商银行转型发展的思考
- js鼠标滚动到某个位置导航菜单显示
- JAVA 模拟post 表单提交
- 初识哈希表——哈希表是个啥?
- 对标天猫、主打带货,“购物号”能否成为微信的新增长点?
- js正则匹配小数点后2位_js验证是正数且保留2位有效小数点的正则表达式
- 高端护肤品牌兰芝研究所举办视黄醇国际学术研讨会