来自网络,总结到这里:

当我想看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树的高度相关推荐

  1. 关于数据结构树的高度从0还是1开始计算的思考

    今天做到老师网课发布的一道题,让求树高h有多少个node,这应该是个挺简单的问题,但是重要的是树从0开始算,还是从1开始算.当时记得老师说的挺清楚的,但是没记笔记,时间长了,也忘了.网上查也是各种答案 ...

  2. 常见数据结构详细图解、树的高度、深度、层数、跳表、二叉搜索树、平衡二叉树、红黑树、B树、B+树

    常见数据结构 常用的数据结构知识. 1.1 跳表 上图是一个有序链表,我们要检索一个数据就挨个遍历.如果想要再提升查询效率,可以变种为以下结构: 现在,我们要查询11,可以跳着来查询,从而加快查询速度 ...

  3. 推导B树的最大高度和最小高度得出B树的高度范围

    前提条件:n>=1,则对于任意一棵包含n个关键字.高度为h.阶数为m的B树. 一.最小高度: 对于任意树类型的数据结构,如果其每层节点能够分布的足够满,其高度也会随之变得足够的低.基于这个思路, ...

  4. using b tree mysql_浅析MysQL B-Tree 索引

    B-Tree 索引 不同的存储引擎也可能使用不同的存储结构,i如,NDB集群存储引擎内部实现使用了T-Tree结构存储这种索引,即使其名字是BTREE:InnoDB使用的是B+Tree. B-Tree ...

  5. 如何获取InnoDB树的高度

    前言 作为DBA了解InnoDB的页组织方式是最基础的,在实际工作中,免不了会评估SQL会消耗多少IO,怎么评估呢? 作为InnoDB表和树的高度或者深度有关系. 查看树的高度? 之前研究了半天: h ...

  6. 是什么影响了MySQL索引B+树的高度?

    hello,大家好,我是张张,「架构精进之路」公号作者. 提到MySQL,想必大多后端同学都不会陌生,提到B+树,想必还是有很大部分都知道InnoDB引擎的索引实现,利用了B+树的数据结构. 那Inn ...

  7. 求树的高度(C++)

    题目描述 现给定一棵树,请你求出它的高度. 输入格式 输入给出二叉树的信息.对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号):随后N行,第i行对应 ...

  8. mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略

    索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...

  9. 一个key 在10w k/v 找到对应的. (B-tree), 这10w放进B-tree 会有多少层.

    B-tree是二叉平衡查找树,相邻两层节点层数不超过1 所有10w 即 2^16=65536 < 10w < 2^17=131072: 会有17层,最多查询17次. 转载于:https:/ ...

最新文章

  1. 详细的多维度测评,看看哪个 Python 版本速度最快!
  2. 算法之排列与组合算法
  3. spring AspectJ的Execution详解
  4. Windows下Caffe-SSD编译
  5. 美国服务器百度抓取耗时不稳定,百度或者其他搜索引擎抓取频次快慢的因素,还会受什么有影响?...
  6. C++题解-Leecode 375. 猜数字大小 II——Leecode每日一题系列
  7. php按钮css样式,CSS 按钮
  8. react(88)--ant design控制inputNumber设置正整数
  9. [转一下]未来卫星通信发展趋势
  10. 滑动平均_善杰告诉您初中物理学滑动变阻器的各种作用
  11. 【职场攻略】比你的工资更重要的十件事
  12. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
  13. dispatcherServlet源码分析之doDispatch
  14. android怎么执行命令,Android程序中执行adb命令
  15. 局域网查共享计算机的ip地址吗,如何查看电脑的内网IP地址?
  16. df.to_csv输出结果隔行多一个空行的解决办法
  17. 三维GIS视频融合监控平台
  18. java win7 管理员权限_win7系统一键取得管理员权限的操作方法
  19. 新人如何利用今日头条自媒体平台赚钱?月收入轻松过万
  20. VS2008向工具箱中添加控件解决 未能实例化 设计时授权

热门文章

  1. Python中 单引号,双引号和三引号的区别
  2. MAC-安装与破解WebStorm(rn开发工具)
  3. 临床医学专业计算机必须过几级,临床、金融、计算机电子信息,这些专业过去现在未来都是大热门...
  4. 大数据时代农商银行转型发展的思考
  5. js鼠标滚动到某个位置导航菜单显示
  6. JAVA 模拟post 表单提交
  7. 初识哈希表——哈希表是个啥?
  8. 对标天猫、主打带货,“购物号”能否成为微信的新增长点?
  9. js正则匹配小数点后2位_js验证是正数且保留2位有效小数点的正则表达式
  10. 高端护肤品牌兰芝研究所举办视黄醇国际学术研讨会