从MySQL开始聊聊“树”结构 (上)

Posted CrazyCodes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从MySQL开始聊聊“树”结构 (上)相关的知识,希望对你有一定的参考价值。

前言

嗨喽,大家好,我是CrazyCodes, 近一年写的文章,都是一些广度方面的思考,新的一年,在技术深度上也需要有更多的探索,感谢各位的持续支持!

mysql

先聊聊大家熟知的MySQL,我们使用MySQL肯定是有数据存储的需求。

我们从基础开始看,首先我们创建一张用户表

CREATE TABLE `user` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

这是一张简单的用户表,包含id和name两个字段,id为主键自增,name上没有索引。想必大家对索引都有一定的认识,索引是一种数据结构,即本篇的核心议题“树”结构,索引可以达到快速命中某条记录,“快速”一词代表着在时间和空间相结合的最优解,当然也并不代表索引越多,数据表设计越合理,要根据实际业务去选择。

我们随机向表中插入几条记录

INSERT INTO `user` VALUES(1,"Join");
INSERT INTO `user` VALUES(2,"Tom");
INSERT INTO `user` VALUES(3,"Jeein");

按照预期,数据库内出现三条对应的记录,这里我使用语句

SELECT * FROM `user`;

对数据进行查询

看到这里,你可能说了,这是在讲什么,增删改查都是常识,有什么好讲的,那我们现在就正式进入正题,首先从插入记录开始说起,MySQL会使用B+树来存储数据记录,B+树是B树的延伸,而B树又是平衡二叉树的延伸,除了平衡二叉树还有二叉查找树,依次基于其概念延伸的排序,大概是如下这样

B+树 -> B树 -> 平衡二叉树 -> 二叉查找树 -> 二叉树 -> 树

当然也不仅仅是所有跟树有关的数据结构,这里为了提高学习树这种数据结构的兴趣,所以以MySQL讲起,纠其根源,再结合MySQL的数据记录将这一串知识链接起来,那我们把这个顺序倒过来依次讲起

树 -> 二叉树 -> 二叉查找树 -> 平衡二叉树 -> B树 -> B+树

我尽量不把这些数据结构讲成教科书的样子。

以上是关于从MySQL开始聊聊“树”结构 (上)的主要内容,如果未能解决你的问题,请参考以下文章

从hook开始聊聊那些windows内核数据结构

Mysql的索引为什么要使用B+树?

聊聊算法--动态规划

为什么选择B+树作为索引结构?

为什么选择B+树作为索引结构?

JDK常用数据结构