我的编程空间,编程开发者的网络收藏夹
学习永远不晚

InnoDB--------查询IOT B+ Tree的高度

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

InnoDB--------查询IOT B+ Tree的高度

1. 背景

   * 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT)。

   * 在InnoDB存储引擎中,每张表都有个主键(Primary key),如果在创建表时没有地定义主键,则InnoDB存储引擎会选择表中符合条件的列或隐式创建主键。

InnoDB--------查询IOT B+ Tree的高度


2. 环境

mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.36-log |
+------------+
1 row in set (0.02 sec)

mysql> select database();
+------------+
| database() |
+------------+
| mytest     |
+------------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| customer         |
| district         |
| history          |
| item             |
| new_orders       |
| order_line       |
| orders           |
| stock            |
| warehouse        |
+------------------+
9 rows in set (0.00 sec)

mysql> show variables like 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_page_size | 8192  |
+------------------+-------+
1 row in set (0.04 sec)


3. 查询

   * 查询每张表primary key对应的root page_no

mysql> select t.table_id table_id, t.name table_name, i.page_no root_page_no 
from information_schema.INNODB_SYS_INDEXES i, information_schema.INNODB_SYS_TABLES t 
where i.table_id = t.table_id 
and i.name = 'PRIMARY' 
and t.name like 'mytest/%';
+----------+-------------------+--------------+
| table_id | table_name        | root_page_no |
+----------+-------------------+--------------+
|       22 | mytest/customer   |            3 |
|       21 | mytest/district   |            3 |
|       27 | mytest/item       |            3 |
|       24 | mytest/new_orders |            3 |
|       26 | mytest/order_line |            3 |
|       25 | mytest/orders     |            3 |
|       28 | mytest/stock      |            3 |
|       20 | mytest/warehouse  |            3 |
+----------+-------------------+--------------+
8 rows in set (0.04 sec)


   * 查询order_line表数据量

mysql> select count(1) from order_line;
+----------+
| count(1) |
+----------+
|  6001615 |
+----------+
1 row in set (9.03 sec)


  * 通过表数据文件order_line.ibd获取高度 [跳过 root_page_no * innodb_page_size + 64, 获取2字节长度就是树的高度]

    由此可得树的高度为3, 高度标记从0开始

[root@localhost class="lazy" data-src]# hexdump -s 24640 -n 2 -C /data/mysql_data_6/mytest/order_line.ibd;
00006040  00 02                                             |..|
00006042


4. B+Tree

高度非叶节点数叶节点数数据行数占用空间
10146816.0KiB
211203> 563 thousand18.8MiB
312041447209> 677 million22.1GiB
414484131740992427> 814 billion25.9TiB

5. xxx

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

InnoDB--------查询IOT B+ Tree的高度

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

获取 MySQL innodb B+tree 的高度的方法

前言 MySQL 的 innodb 引擎之所以使用 B+tree 来存储索引,就是想尽量减少数据查询时磁盘 IO 次数。树的高度直接影响了查询的性能。一般树的高度在 3~4 层较为适宜。数据库分表的目的也是为了控制树的高度。那么如何获取树的
2022-05-11

如何使用Memcache提高PHP开发中的数据查询速度?

如何使用Memcache提高PHP开发中的数据查询速度?随着现代应用程序的复杂性的提高,数据库查询速度逐渐成为应用程序的瓶颈之一。特别是在高负载情况下,数据库查询操作可能会导致应用程序变慢或出现连接超时。为了解决这个问题,很多开发者开始使用
如何使用Memcache提高PHP开发中的数据查询速度?
2023-11-07

如何在MySQL中设计一个性能优化的会计系统表结构以提高查询和报表生成速度?

如何在MySQL中设计一个性能优化的会计系统表结构以提高查询和报表生成速度?在现代企业的会计系统中,数据量庞大且复杂,频繁的查询和报表生成是常见的需求。为了提高系统的性能和响应速度,设计一个优化的数据库表结构是至关重要的。规范化数据库表结构
如何在MySQL中设计一个性能优化的会计系统表结构以提高查询和报表生成速度?
2023-10-31

编程热搜

目录