【数据库】执行计划中二元操作对一趟扫描算法的应用,理解代价评估的应用和优化,除了磁盘代价还有CPU计算代价不容忽略

二元操作的一趟算法

专栏内容

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

开源贡献

  • toadb开源库

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

文章目录

  • 二元操作的一趟算法
  • 前言
  • 概述
  • 并集
    • 包的并集
    • 集合的并集
  • 交集
    • 包的交集
    • 集合的交集
  • 差集
    • 包的差集
    • 集合的差集
  • 连接
  • 总结
  • 结尾

在这里插入图片描述

前言

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

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

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

概述

前一篇博文分享了一趟算法的机制和在一元操作中的应用,代价评估。本文将分享一趟算法在二元操作中的应用,代价估算,以及存在的优化点。

在关系代数中,涉及到的二元操作主要是集合操作,如并集,交集,差集,积和连接。

同样对于适用一趟算法的限制,还是可分配的缓冲区大小M,如果表足够小,或者结果集能装入缓冲区,那么就可以使用一趟算法,否则需要二趟或更多趟,这在后续博文中会分享,敬请期待。

并集

这里的并集,要区分对集合的操作还是对于包的操作。

包的并集

如果是包的并集,那可以通过一种非常简单的一趟算法计算出来,我们先通过迭代器获取到表R的每一个元组,输出到结果,然后再获取表S的每一个元组,输出到结果。

集合的并集

而对于集合的并集操作,我们需要先将较小的表S先读取加载到缓冲区中,并使用一种便于查找的数据结构,如查找树或者hash表等;将表S的所有元组输出到结果;

然后将较大表R使用迭代器,每次获取一个元组,检查在表S中是否存在,如不存在,则将此元组输出结果,如果存在的话,则忽略。 直到表R所有元组处理完成。

对于包和集合的操作,在此过程中,只需要一个缓冲区块即可,而磁盘IO的数量为两表文件所占数据块的和。

交集

这里的交集,也是要区分对集合的操作还是对于包的操作。

包的交集

包的交集处理时,也是将较小的表S先加载到缓冲区中的查找结构中,但是对于表中的重复元组,不再重复保留多个副本,而是采用元组与和它的数量计数器。

然后将第二张表R使用迭代器,每次获取一个元组,检查在表S中是否存在。

  • 如不存在,则忽略;
  • 如果存在的话,将表S中对应的数据的计数减1;此时计数已经为负值,那么就删除表S中的对应元组;
    直到表R的所有元组处理完成,最后剩余的元组中,计数器结果为0的就是结果,输出,也就是两个包中元组及元组副本数相同的部分。

集合的交集

而对于集合的交集操作,我们需要先将较小的表S先读取加载到缓冲区中,并使用一种便于查找的数据结构,如查找树或者hash表等;将表S的所有元组存放在查找数据结构中;

然后将较大表R使用迭代器,每次获取一个元组,检查在表S中是否存在,如不存在,则忽略;如果存在的话,则将此元组输出结果,直到表R所有元组处理完成。

对于包和集合的操作,在此过程中,只需要的缓冲区块是较小表的数据块再加1个,当然对于包交时,副本越多需要的缓冲区越少,而磁盘IO的数量为两表文件所占数据块的和。

差集

这里的差集,也是要区分对集合的操作还是对于包的操作。

差集是一种不能交换的操作,表R-表S的差,和表S-表R的差,是两种差集。

包的差集

包的差集处理时,也是将第一个表S先加载到缓冲区中的查找结构中,但是对于表中的重复元组,不再重复保留多个副本,而是采用元组与和它的数量计数器。

然后将第二张表R使用迭代器,每次获取一个元组,检查在表S中是否存在。

  • 如不存在,则输出到结果;
  • 如果存在的话,此时计数已经为0,那么就输出结果;如果计数大于0,将表S中对应的数据的计数减1;
    直到表R的所有元组处理完成。

集合的差集

而对于集合的差集操作,我们需要先将第一个表S先读取加载到缓冲区中,并使用一种便于查找的数据结构,如查找树或者hash表等;将表S的所有元组存放在查找数据结构中;

然后将第二张表R使用迭代器,每次获取一个元组,检查在表S中是否存在。

  • 如不存在,则忽略;
  • 如果存在的话,将表S中对应的数据删除;
    直到表R的所有元组处理完成,最后剩余的元组就是结果,输出。

对于包和集合的操作,在此过程中,只需要的缓冲区块是较小表的数据块再加1个,而磁盘IO的数量为两表文件所占数据块的和。

积操作时,将较小表S加载到缓冲区中,不需要查找结构;然后从迭代器中获取第二张表R的每一条元组,依次与表S中的每一个元组进行积的操作,并输出结果。

这个过程中,缓冲区也是需要表S的数据块数量+1个,磁盘IO是两表的数据块的和;而对于积操作时,需要元组数n平方的计算时间。

连接

这里我们以自然连接为例进行分享。
当表R(X,Y)与表S(Y,Z)进行连接时,连接属性为Y,是两表的公共属性。

先是将较小表S加载到缓中区中,建立属性Y上的查找表;
然后将第二张表R通过迭代器,获取每一条元组,检查在查找表中是否存在:

  • 如不存在,则忽略;
  • 如果存在的话,将表S中对应的元组与表R的元组组成新元组输出;
    直到表R的所有元组处理完成。

等值连接与自然连接的执行方式一样,当然我们需要考虑两个连接属性的名字不同的情况;

总结

经过上面对一趟算法在二元操作中应用的分享后,可以看到这一算法读取操作对象需要使用两表的数据块和的次数磁盘IO;需要的缓冲区数量近似于一张表的数据块数量;而在连接和积时,会额外考虑计算代价。

结尾

最后分享一段helloworld的代码
在GCC中,正确的析构函数应该使用 __attribute__((destructor))

__attribute__((destructor))  void aftermain() {  
    printf("Hello, World!\n");  
}  
  
int main() {  
    return 0;  
}

在这个示例中,aftermain 函数被设定为析构函数,这意味着当程序结束时,它将自动执行。所以,无论你的 main 函数是否返回 0aftermain 函数都会被调用并输出 “Hello, World!”。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后,发现异常的知识是多么的吸引人!不仅可以用来标记错误,还可以自己定义一个异常,用来实现自己想完成的业务逻辑,接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

【数据处理】 -- 【两分钟】了解【最好】的方式 -- 【正则表达式】

直接匹配; 普通字符 元匹配: . 任意单字符 r’表示单引号里字符为其特殊含义,比如.不是句号是匹配符的意思 *任意次数(换行结束) 一次及以上 {3,4}指定次数,至少3次,最多4次|{3}固定4次 [\d.]单个任意…

软件工程简明教程

软件工程简明教程 何为软件工程? 1968 年 NATO(北大西洋公约组织)提出了软件危机(Software crisis)一词。同年,为了解决软件危机问题,“软件工程”的概念诞生了。一门叫做软件工程的学科也就应…

redis运维(二十)redis 的扩展应用 lua(二)

一 redis 的扩展应用 lua redis lua脚本语法 ① 什么是脚本缓存 redis 缓存lua脚本 说明: 重启redis,脚本缓存会丢失 下面讲解 SCRIPT ... 系列 SCRIPT ② LOAD 语法:SCRIPT LOAD lua代码 -->载入一个脚本,只是预加载,不执行思考1&#xff1…

吴恩达《机器学习》10-4-10-5:诊断偏差和方差、正则化和偏差/方差

一、诊断偏差和方差 在机器学习中,诊断偏差和方差是改进模型性能的关键步骤。通过了解这两个概念,能够判断算法的问题究竟是欠拟合还是过拟合,从而有针对性地调整模型。 1. 概念理解 偏差(Bias): 表示模…

《微信小程序开发从入门到实战》学习三十一

3.4 开发参与投票页面 3.4.9 显示投票结果 在实际使用中,一个用户不能对同一个投票进行重复提交,因此需要向服务器端提交投票结果和提交用户ID。另外页面,需要完善。用户提交完投票后 ,还需要显示投票目前的结果,提交…

C#,《小白学程序》第二十课:大数的加法(BigInteger Add)

大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。 重复了部分 19 课的代码。 1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary>…

字符串函数

目录 读取字符串的函数 1.gets()函数 2.fgets()函数&#xff08;不是所有的编译器都支持例如CodeBlocks&#xff09; 3.scanf()函数 4.getchar()函数 输出字符串的函数 1.puts()函数 2.fputs()函数&#xff08;编译器不一定支持&#xff09; 3.printf()函数 4.putchar…

【开源】基于Vue.js的陕西非物质文化遗产网站

文末获取源码&#xff0c;项目编号&#xff1a; S 065 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S065。} 文末获取源码&#xff0c;项目编号&#xff1a;S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于多尺度分量特征学习的用户级超短期负荷预测》

这篇文章的标题表明研究的主题是用户级超短期负荷预测&#xff0c;并且该预测方法基于多尺度分量特征学习。让我们逐步解读这个标题&#xff1a; 用户级&#xff1a; 这表示研究的焦点是在个体用户层面上进行的。负荷预测可能是指电力系统中的负荷&#xff0c;即电力需求。用户…

大模型能否生成搜索引擎的未来?

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 ChatGPT火爆之前&#xff0c;水面下&#xff0c;也有中国公司也在朝着智能助手的方向努力。夸克便是其中之一。在GPT风靡科技圈后&#xff0c;国内就开始陆续冒出一些大模型厂商。对当时夸克而言&#xff0c;做大模型毋庸置疑&am…

五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 &#xff08;1&#xff09;多目标粒子群优化算法MOPSO 多目标应用&#xff1a;基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度&#xff08;MATLAB代码&#xff09;-CSDN博客 &#xff08;2&#xff09;多目标人工蜂鸟算法&#xff08;MOAHA…

Redis-Redis 高并发分布式锁

集群分布式场景高并发 1.negix配置代理和路由 高并发场景超卖问题 1.使用原生redis控制超卖时(若是商品&#xff0c;则可以将商品id作为锁对象)&#xff0c;会遇到的问题 问题一&#xff1a;若直接使用&#xff1a;将获取锁的对象和设置的超时的时间分开&#xff0c;则不能控…

桥接设计模式

package com.jmj.pattern.bridge;/*** 视频文件(实现化角色)*/ public interface VideoFile {void decode(String fileName); }package com.jmj.pattern.bridge;public class RmvFile implements VideoFile{Overridepublic void decode(String fileName) {System.out.println(&…

论文阅读——MCAN(cvpr2019)

补充一下MCAN-VQA&#xff1a; 对图片的处理&#xff1a;首先输入图片到Faster R-CNN&#xff0c;会先设定一个判断是否检测到物体的阈值&#xff0c;这样动态的生成m∈[10,100]个目标&#xff0c;然后从检测到的对应的区域通过平均池化提取特征。第i个物体特征表示为&#xff…

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…

网络通信基础概念介绍

网络通信基础概念介绍 局域网LAN 局域网&#xff0c;即 Local Area Network&#xff0c;简称LAN。 局域网内的主机之间能方便的进行网络通信&#xff0c;又称为内网&#xff1b;局域网和局域网之间在没有连接的情况下&#xff0c;是无法通信的。 局域网是指在一个相对较小的…

微机课设--汇编语言在51单片机上写一个四位十进制加法器

代码如下 KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 37HS_DAT EQU 38HD_DAT EQU 39HR_DATL EQU 3AHR_DATH EQU 3BH CALFLAG EQU 3CHFLAG BIT 00HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0D8HMOV TL0,…

过渡曲线的构造之平面PH曲线

平面PH曲线的构造及其相应性质 平面PH曲线的构造及其相应性质PH曲线理论三次PH曲线的构造及性质四次PH曲线的构造及性质五次PH曲线的构造及性质非尖点五次PH曲线尖点五次PH曲线 参考文献 平面PH曲线的构造及其相应性质 过渡曲线常需要满足在连接点处位置连续、曲率连续以及切线…

如何看待 2023 OPPO 开发者大会?潘塔纳尔进展如何?AndesGPT 有哪些亮点?

在2023年11月16日举行的OPPO开发者大会&#xff08;ODC23&#xff09;上&#xff0c;OPPO带来了全新ColorOS 14、全新互联网服务生态以及健康服务进展&#xff0c;这些新动态中有许多值得关注的地方。 1、全新ColorOS 14&#xff1a; 效率提升&#xff1a;ColorOS 14通过一系列…