当前位置: 首页 > news >正文

辽宁建设工程信息网官方网站品牌策划方案案例

辽宁建设工程信息网官方网站,品牌策划方案案例,查询网站备案进度,办公室装修设计效果图嵌套循环连接 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新…

嵌套循环连接

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 嵌套循环连接
  • 前言
  • 概述
  • 原理介绍
  • 基于元组的嵌套循环连接算法
    • 基于元组的循环迭代器
    • 代价分析
  • 基于块的嵌套循环连接算法
  • 嵌套循环优化
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

前面几篇博客介绍了查询执行中,最基本的表扫描操作中的一趟算法的应用。

本文继续介绍查询执行中,经常碰到的连接操作,涉及到两张以上表的数据,表越多效率越低,所以在实际应用中,我们要尽量减少连接当中涉及到的表的数量,下面的分享中可以找到答案。

原理介绍

对于连接操作,最通用的算法就是采用嵌套循环方式来实现,它不用区分表的大小,都可以适应。之前我们分享了一趟扫描算法,但对于嵌套循环连接来讲,它不是严格意义上的一趟算法,可以叫它一趟半算法,因为它在扫描的过程中,会重复多次读取其中一张表的数据。

这也是它通用的原因所在,占用空间只需要两个数据块的缓冲区大小。

在实际实现算法时,我们会分为两个形式,一种是基于元组的嵌套循环算法,一种是基于块的嵌套循环算法,下面就让我们看看它们的流程。

基于元组的嵌套循环连接算法

嵌套循环连接最直接的方式,就是对所涉及表的各个元组进行处理,每次从表中得到一个元组,然后遍历另一张的表的元组进行连接,再从第一张表中得到下一条元组,又重新遍历第二张表的所有元组,直到第一张表的元组遍历完。

假定表R(X,Y)与表S(Y,X)进行连接,用伪代码表示如下:

for S中的每条元组 s DOfor R中的每条元组 r DOif r 与 s 连接形成元组 t Thenoutput t;

基于元组的循环迭代器

嵌套循环连接的一个最大优点是它非常适合用于迭代器结构,这样可以避免有很多中间数据,假定关系R和S都是非空的,可以实现嵌套循环连接的三个迭代函数,示意如下:

Open()
{R.Open();S.Open();s = S.GetNext();
}GetNext()
{for(;;){r = R.GetNext();if(r == notFound){/* R是内循环表,已经遍历完 */R.Close();s = S.GetNext();if(s == notFound){/* 外层循环表 S,已经遍历完,整个结束 */return ;}/* 重新从头扫描R表 */R.Open();r = R.GetNex(); }if(r与s 能连接)break;}return r与s的连接;
}Close()
{R.Close();S.Close();
}

代价分析

这一算法需要的磁盘I/O数量,可能最多与两张表的元组行数的乘积,也就是一个双层循环的循环次数。

当连接的表数量多时,每增加一张表,就会多一层循环,可想而知,磁盘I/O数量是惊人的。

基于块的嵌套循环连接算法

对于基于元组的嵌套循环连接算法带来的I/O数量非常大,如果我们尽可能将两表更多的装入缓存当中,虽然它们都不能全部装入缓存,这样在内存中处理时,将它们一次处理多个元组的连接。

假设有缓冲区块M个,R表与S连接时,S表是较小的表,那么可以将S表的数据块加载到M-1个缓冲区块中,将连接属性建立查找表,再读取R表的一个数据块到第M个缓冲区中。

这样从R表的这个数据块上遍历元组,分别与M-1缓中区块中的S表的所有元组进行连接处理,接着再读取R表的下一个数据块,直到R表遍历一次;

然后再更新M-1个缓冲为下一批S表的数据块,重复上面的处理,直到S表遍历完成。

这样可以减少磁盘I/O的次数,每次读更多的数据块,将随机访问转为顺序访顺。

嵌套循环优化

当然,也可以通过连接属性列上的索引,找到对应的表数据块,减少访问的表数据块,当然也需要与基于块的嵌套循环算法结合。

总结

通过本文的分享,让我们对表的连接有了更深的理解,在平常编写SQL时,常听前辈们说起,连接不能超过多少张表,为什么呢?要记住,每多一张表,类似于多了一层嵌套循环,虽然有索引,代价也是相当大的。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

http://www.hengruixuexiao.com/news/19013.html

相关文章:

  • 做php网站时如何建立数据库营销网站建设的因素
  • 公众号怎么制作微信红包封面seo教学网seo
  • 做的网站客户拿去维违法餐饮培训
  • 崇左做网站公司百度网站
  • 1m带宽做网站快不新闻头条最新
  • wordpress幻灯片滚动插件菏泽seo
  • 做网站的框架结构百度自媒体怎么注册
  • 动态网页设计作业成品在线seo关键词排名优化
  • wordpress 导出html5360优化大师官方免费下载
  • 用Html5做网站企业培训课程推荐
  • 做网站gif代码上海seo招聘
  • 泰安网络诈骗网上报警seo在线教程
  • 一站式网站建设平台免费下载百度一下
  • 西安网站建设报价方案打开百度搜索
  • 做礼品公司网站的费用精准引流推广公司
  • 做一个大型网站需要多少钱中国十大营销策划公司排名
  • 安徽手机版建站系统信息湖北seo诊断
  • a站b站搭建网站需要哪些步骤
  • 网站群管理建设帮人推广的平台
  • 外贸工厂 网站建设web设计一个简单网页
  • 做网站公司关键词成免费crm特色
  • 怎么建设淘宝联盟的网站谷歌seo和百度seo
  • proudly powered by wordpress站长之家seo综合
  • 好的网站设计网络营销的模式有哪些
  • 梁平区高点击量网站建设哪家好短期的技能培训有哪些
  • 太原建立网站百度网盘资源搜索引擎
  • 嘉兴专业做网站的公司附近的教育培训机构有哪些
  • 做高效能的父母网站中级经济师考试
  • 制作宝安网站建设网络推广seo怎么弄
  • 郑州做网站好2023年5月最新疫情