千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:深圳千锋IT培训  >  技术干货  >  mysql B+树中为什么同层的非叶子节点所在的页也使用双向链表连接?

mysql B+树中为什么同层的非叶子节点所在的页也使用双向链表连接?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 16:50:26

一、mysql B+树中同层的非叶子节点所在的页也使用双向链表连接的原因

这样设计是为了提高查询效率。在查询过程中,当查询到某个非叶子节点时,需要继续向下查找。同一页中的节点被连接起来,可以缩短查找路径,从而提高查询效率。

同时,由于非叶子节点也被存储在数据页中,当需要访问某个叶子节点时,可以通过直接访问该页在内存中的地址来提高访问速度。如果没有使用双向链表连接同层级的非叶子节点,就需要进行繁琐的磁盘I/O操作,会降低访问速度。

二、mysql概述

1、简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是较好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

2、应用环境

与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。

Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。

3、系统特性

MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和 Tcl 等。支持多线程,充分利用 CPU 资源。优化的 SQL查询算法,有效地提高查询速度。既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。提供用于管理、检查、优化数据库操作的管理工具。支持大型的数据库。可以处理拥有上千万条记录的大型数据库。支持多种存储引擎。MySQL 是开源的,所以你不需要支付额外的费用。MySQL 使用标准的 SQL数据语言形式。MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。

三、双向链表简介

1、定义

双向链表(Double Linked List)是一种更复杂的链表,每个节点除了包含元素域,还包含两个链接:一个指向前一个节点,当此节点为名列前茅个节点时,指向空值;另一个指向下一个节点,当此节点为最后一个节点时,指向空值。

2、基本操作

is_empty() 判断链表是否为空length 链表长度travel() 遍历整个链表,打印元素add(item) 在链表头部添加元素append(item) 在链表尾部添加元素insert(pos, item) 在指定位置插入元素remove(item) 删除元素clear() 清空链表is_contain(item) 判断元素是否存在

3、创建双向链表结点

实现代码:

//创建双向链表结点Node* create_node(int data){    Node* node = (Node*)malloc(sizeof(Node));//申请内存    node->data = data;    node->prev = NULL;    node->next = NULL;    return node;}

延伸阅读1:B+树结构定义

m阶B+树的结构定义如下:

每个节点非常多有m个子节点。除根节点外,每个节点至少有m/2个子节点,注意如果结果除不尽,就向上取整,比如5/2=3。根节点要么是空,要么是独根,否则至少有2个子节点。有k个子节点的节点必有k个关键码。叶节点的高度一致。
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

为什么要使用前端框架来构建页面?

2023-10-14

JS正则中exec与match有哪些区别?

2023-10-14

什么是Flash?

2023-10-14

最新文章NEW

游戏服务器开发需要掌握哪些?

2023-10-14

JS alert()、confirm()、prompt()有什么区别?

2023-10-14

在线文档哪个好用?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>