考虑表结构如下: create table testzh(id int primary key auto_increment ,id2 int,id3 int); 插入数据: delimiter // create procedure ins3() begin declare i int; set i=0; while i<10000 do insert into testzh(id2,id3) values(FLOOR((RAND()*100000)),FLOOR((RAND()*100000))); set i=i+1; end while; end; // delimiter ; 这里仅仅考虑聚合索引的B+数结构。 首先我们要考虑2个因素: 1、分支节点如何存储一行数据 2、叶子结点如何存储一行数据 位了找到这个问题我们必须要找到哪些块是叶子结点,哪些块是非叶子结点,这里使用自己写的一个程序 找到详细参考最后的代码 (http://blog.itpub.net/7728585/viewspace-2128817/) [root@testmy test]# ./t1 testzh.ibd file size is 442368 Block id is 3:Index page no is 552 : B+ Tree Level is 1 Block id is 4:Index page no is 552 : B+ Tree Level is 0 Block id is 5:Index page no is 552 : B+ Tree Level is 0 Block id is 6:Index page no is 552 : B+ Tree Level is 0 Block id is 7:Index page no is 552 : B+ Tree Level is 0 Block id is 8:Index page no is 552 : B+ Tree Level is 0 Block id is 9:Index page no is 552 : B+ Tree Level is 0 ..... 可以看到在这个文件中block_id = 3的是非叶子结点 其他的块是叶子结点。 那我们来研究第一个问题 1、分支节点如何存储一行数据 其实这个问题答案就是 6字节固定开销+4字节(int数据类型4字节)+4字节(指向叶子结点的指针开销) 我们知道每个数据库块的前120直接是管理固定开销如: FILE HEADER,INDEX HEADER等 在块尾部也有8字节的固定开销 那么我们从offset 120开始向后面数14个字节,这里也要使用我自己写的工具 bcview 方便查看 ./bcview testzh.ibd 16 120 14 current block:00000003--Offset:00120--cnt bytes:14--data is:00100011000e8000000100000004 得到数据: 00100011000e8000000100000004 分析一下: 00100011000e8000000100000004 固定开销(6字节) 00 nullable field bitmap (?) 10 info flags+number of records owned 0011 order+ record type (0000 0000 0001 0001) 000e 下一个偏移量 --可变开销(实际数据4字节) 80000001 (实际主键数据1其中8是符号位) --固定开销(4字节) 00000004 (叶子结点block指针) 我们可以看到这是非叶子结点存储数据的格式如此,除了4字节的主键外,这里包含了10字节的额外开销。 2、叶子结点如何存储一行数据 接下来我们来看一下这个表的每一行数据是如何存放的,二进制如下: ./bcview testzh.ibd 16 120 31 current block:00000004--Offset:00120--cnt bytes:31--data is:00000010001f800000010000004d1995cd000001440110800046cd80000683 00 nullable field bitmap(?) 00 info flags+number of records owned 0010 order+record type 001f 下一个偏移量 80000001 (实际主键id数据1其中8是符号位) 0000004d1995 transaction id cd000001440110 roll pointer 800046cd (实际数据id2:18125 8是符号位) 80000683 (实际数据id2:1667 8是符号位) 实际上就是31个字节 那么我们很容易计算出来如果满存储行大约(16*1024-128(块头块尾部))/31 = 524 行数据。当然实际上存储达不到这个值受到 B+树分裂行为以及填充因子等限制实际上到不了这个值,我这里去大约500行数据 好了对于这张表这里我们可以实际大约计算一下理论值,实际值将略小: 一层B+树 最大16K空间 约500行数据 二层B+树 最大约18M空间((16*1024-128)/14 * 16/1024 ) 约58000行数据((16*1024-128)/14 *500) 三层B+树 最大约21000M空间(power((16*1024-130)/14,2) * 16/1024) 约673960500行数据(power((16*1024-130)/14,2) * 500) 四层B+树 最大约24452000M空间(power((16*1024-130)/14,3) * 16/1024) 约782468140500行数据(power((16*1024-130)/14,3) * 500) 但是要注意这里最大空间受到主键选择影响很大,如果不是int为主键那么其非叶子结点一行数据将不会是14字节如果是long类型将是18字节,那么最大空间 将不会达到这么大,而行数更是受到实际一行数据大小限制,这里只是以文章开头建立的表为列子。 |
免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!
始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!
扫一扫,关注站长网微信
1、打开掌阅app,点击“我的”, 2、点击“设置”, 3、进入设置页面,点击“备份与同步”, 4、进入备份与同步页面,点击“书架备份与同步”,选择需要同步 ......
此前,腾讯宣布将推出基于NT架构的新版Windows QQ。今天,腾讯正式发布了新版Windows QQ的首个公测版,面向此前报名公测,并获得资格的用户开放下载。新Windows ......
答:荣耀60se支持门禁卡。 只要更新到最新的操作系统。 并且使用支持nfc技术的门禁卡即可。 荣耀60se门禁卡添加教程: 1、首先打开手机“钱包app” 2、接着点 ......
1、打开qq浏览器的页面,点击右上角“下载”图标, 2、会出现一个下载管理的页面,在这里就可以看到我们下载过的全部文件了。 找到qq浏览器的文件在哪里的方法 ......
前阵子,腾讯历时 4 年打造的“ 末日僵尸生存”游戏《 黎明觉醒》,终于上线。在前期宣发中,光子工作室表示,游戏采用虚幻四打造,画面大幅升级,还会出现可探 ......
1、首先单击电脑开始键,选择控制面板。 2、打开后找到语言选项,点击“更改显示语言” 3、打开后点击“管理”按钮。 4、再点击下方的“更改系统区域设置” ......
1、首先进入“控制面板—用户账户—管理其他账户”, 即可查看登录的账户是不是管理员账户,不是的话就没有权限更改。 2、右击左下角开始键,点击“命令提示符 ......
方法一: 1、首先打开手机的“电话”功能。 2、接着拨打电话。 3、拨通后,点击“红色方块”的录音就可以开始通话录音了。 方法二: 1、我们也可以在通话时 ......
1、开始菜单打开控制面板。 2、在控制面板中找到硬件和声音,点击打开。 3、在硬件和声音窗口中选择电源选项。 4、点击电源选项窗口左侧的更改计算机睡眠时间 ......
1、点击左下角开始,打开管理工具选择“高级安全windows防火墙”。 2、在左侧的任务栏中选择“入站规则”随后在右侧点击“新建规则”。 3、选择“端口”点击下 ......
以ChatGPT为代表的生成式AI火爆全球,最新的GPT-4大模型又进一步提升了ChatGPT的能力,国内有多家公司都在对标ChatGPT,然而发布出来的产品被指差距极大,360创 ......
《霍格沃茨之遗》的热潮退去后,这款游戏的Steam在线人数从近88万跌至7.5万。推特上有“反恐同”人士嘲讽道:“哈利·波特在霍格沃茨住了7年,你们这些粉丝连2个 ......
1、网速问题 网速太慢,只能换网线。 2、电脑配置问题 可以换零件,重新组装。 3、浏览器问题 浏览器出现故障,可以用修复软件修复或者重新下载一个浏览器。 4 ......
1、首先我们开机,如果已经开了那就重启电脑, 开机进入图示的“英特尔logo”画面时,马上进行第二步。 2、在进入类似上方的logo界面时,快速按下键盘上的“del ......
1、右击桌面此电脑,点击“属性”。 2、进入属性后点击“控制面板主页”。 3、在里面选择打开“程序和功能”。 4、随后在里面打开“启用或关闭windows功能” ......
2016年12月新海诚导演的动画电影《你的名字。》在国内上映,首日就拿下了7629.53万票房。今天,新海诚的新作《铃芽之旅》在国内上映,截止本文成稿,首日票房成 ......
1、点击左下角开始,搜索cmd,选中cmd.exe用管理员身份运行。 2、打开后输入“netsh wlan set tednetwork mode=allow ssid=Test key=0123456789” (ssid是无 ......
在谷歌宣布生成式AI Bard开启公测后,微软研究院首席研究员Kate Crawford在社交媒体发布文章,质疑Bard的训练数据集调用了Gmail的数据。换言之,Crawford质疑谷 ......
答:administrator是系统管理员的意思,可以删除的。 这个单词的意思就是超级用户,是指电脑权限不受控的人。 删除是可以删除的,但是一定要在创建了第二个账户 ......
1、打开“资源管理器”,即可查看七个文件夹。 2、在空白桌面出建立“文本文档”。 3、随后进入文本文档,复制黏贴下列代码。 Windows Registry Editor Versio ......
1、点击任务栏右下角的网络图标,点击“网络和Internet设置”。 2、在设置窗口右侧找到更改网络设置,点击下方的“更改适配器选项”。 3、右击你正在使用的网 ......
继ChatGPT、文心一言之后,谷歌终于将自家对话式AI服务Bard开放测试。谷歌表示,公测将从美国和英国开始,开放更多用户访问是“改进它的下一个关键步骤”。与Cha ......
答:appdata能删。 一般不建议删除,删除了之后容易造成应用程序配置丢失,可能在开启一些程序的时候会失败,严重清理还可能会导致无法启动。 里面有三个子文 ......
1、找到桌面的此电脑右击打开“管理”。 2、随后点击左侧任务栏中的“任务计划程序”。 3、再点击下拉中的“任务计划程序库”。 4、此时可以将右侧的菜单中的 ......
答:电脑guest的意思是给客人访问电脑系统的账户。 在系统之中被称作“来宾账户”这个账户一般没有修改系统设置的权限。 可以用作读作计算机系统的信息和文件, ......
1、首先在桌面空白处右击选择个性化打开。 2、在打开的击界面点击打开右下角的屏幕保护程序。 3、在新开的屏幕保护界面就可以选择各种效果来保护屏幕了。 4、 ......
1、在开机界面重启三次后再次开机即可进入安全模式,点击“启用安全模式”。 2、随后点击左下角开始键,点击“设置”。 3、在windows设置中点击“应用”。 4 ......
一、来源不同 1、iso来源于系统光盘,gho来源于系统克隆文件。 二、使用方法不同 1、iso不需要解压缩,直接打开或刻录到光盘中读取就能安装。 2、gho需要解压运 ......
3月25日,中国计算机学会(以下简称CCF)与钉钉达成合作,联合发布了CCF的数字化平台——CCFLink。CCF上线专属钉钉,这是CCF提升数字化水平,探索全新会员服务模 ......