博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL InnoDB表--BTree基本数据结构
阅读量:7055 次
发布时间:2019-06-28

本文共 726 字,大约阅读时间需要 2 分钟。

    MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据。

    我最开始是搞Oracle的,头一次接触MySQL的时候,默认引擎还是MyISAM。当时我看到公司建立的所有的InnoDB表都会在第一列加一个业务无关的自增主键,我觉得很没有必要,问了些人这么做的意义,得到的答案也是让人搞不懂,其实也都没有说到根本上,只是说这样据说效率会更好。于是我在数据仓库项目的建设时普遍没有采用这种形式,大部分的表都是不指定主键的。

    其实现在想来,最开始设计那些表的人确实是对MySQL InnoDB有研究过的,建表很讲究。那么BTree是什么样子的?

    

    我画了一个图,但是这个图有点问题,叶子节点应该是双向链表,我只画成了单向链表。这样也可以看出来,所有的值都是存放在叶子节点中的,至于每一个页能放多少数据,我没有考据过,如果大家知道不妨告诉我。每每看到这个图我都想起了我大学时代的热血岁月,每天画二叉树算遍历的成本,那会儿真是少年不知愁滋味啊。这里的蓝色方块指的是指针,我没有区分指向子页的指针和指向下一个叶子页的指针。

    基本的数据结构就已经说明白了,下回有时间了更新一下插入数据和删除数据时,如何操作。

 

    -------

    这里说明一下,这个主要讲的是主键索引,InnoDB表按照主键进行组织,我上面的图其实只是其中一部分,《高性能MySQL》里有一个图画的不错,图5-7,这里整张表就在索引的数据结构上。根据书中描述,聚簇索引“就是”表。

转载于:https://www.cnblogs.com/wingsless/p/5041043.html

你可能感兴趣的文章
java并发编程:如何创建线程
查看>>
第七天-列表、元祖、字典、集合、数字类型
查看>>
吴忠军-临沂一业主未交取暖费新房却被淹,损失咋处理?
查看>>
Win 7—搭建FTP服务器配置
查看>>
Android项目实战_手机安全卫士程序锁
查看>>
PHP连接MYSQL数据库的3种常用方法
查看>>
C++类中的特殊成员函数-------复制构造函数
查看>>
barManager.Menu(barSubItem)
查看>>
敏感词的过滤
查看>>
运维常用工具
查看>>
ajax写用户注册
查看>>
Prony算法
查看>>
登录界面 动画背景效果
查看>>
day1-Vsftpd
查看>>
洛谷P2296 寻找道路==codevs3731 寻找道路
查看>>
Ubuntu删除history记录
查看>>
关闭或开启Linux上的iptables防火墙,SSH端口(转)
查看>>
Send Mail 网址
查看>>
最小生成树Kruskal——最优布线问题(codevs 1231) (可做Kruscal模板)
查看>>
git配置用户名邮箱,全局配置/单仓库配置
查看>>