【CMU 15-445】Lecture 11: Joins Algorithms 学习笔记

Joins Algorithms

  • Nested Loop Join
    • Naive Nested Loop Join
    • BLock Nested Loop Join
    • Index Nested Loop Join
  • Sort-Merge Join
  • Hash Join
    • Basic Hash Join
    • Partitioned Hash Join
  • Conclusion

本节课主要介绍的是数据库系统中的一些Join算法

Nested Loop Join

Naive Nested Loop Join

最简单的Join算法就是遍历两个表中的所有tuple,这会使得内层关系的块被反复读取。假设外层关系R的数据块数量为 M M Mtuple数量为 m m m,内层关系S的数据块数量为 N N N,则总的IO复杂度为 M + m ∗ N M+m*N M+mN
在这里插入图片描述

BLock Nested Loop Join

在简单的Naive Nested Loop Join中,没有充分利用内存缓冲页,假设内存缓冲页数量为 B B B,则可以一次性加载 B − 2 B-2 B2个外层关系R的记录块进行处理,如下图所示。IO复杂度约为 M + ⌈ M / ( B − 2 ) ⌉ ∗ N M+\lceil M/(B-2) \rceil*N M+M/(B2)⌉N
在这里插入图片描述

Index Nested Loop Join

在上述两种基本的Nested Loop Join中,性能的瓶颈在于对于外层关系R中的每一个元组,都需要遍历内层关系S中的元组进行判断。可以使用索引对判断进行优化,直接找到内层关系S中符合条件的元组进行输出。具体的做法是,在关系S的连接属性上建立索引,对于R中的每一个元组,根据索引找到对应的S中元组进行连接。假设在索引上查找的代价为 C C C,则总IO复杂度为 M + m ∗ C M+m*C M+mC

Sort-Merge Join

如果两个待连接的关系在连接属性上是有序的,则可以使用合并的方式进行连接。两个关系中的每一个元组均只需遍历一遍,即合并复杂度为 M + N M+N M+N。如果关系在连接属性上无序,我们可以利用第一节所讲的排序算法进行排序。

Hash Join

Basic Hash Join

基本的Hash Join分为两个阶段:

  • Build:遍历外层关系R并在内存中建立哈希表
  • Probe:遍历内层关系S,使用已建立的哈希表进行探查

一种常见的优化是使用Bloom Filter。Bloom Filter是一种概率性的数据结构,可以存放于CPU的cache中,用于判断某个Key是否存在于哈希表中。它可能将不存在误判为存在,但是不会将存在误判为不存在。可以在进入哈希表查找之前先查看Bloom Filter。

Partitioned Hash Join

在基本的hash join中,我们需要在内存中对外层关系建立哈希表,当内存不足以存放该哈希表时,可以使用类似聚合的哈希实现方法:

  • Build:先使用哈希函数将两个关系的元组分区
  • Probe:针对每个分区进行探查处理,可以使用简单的Nested Loop Join

考虑其IO复杂度,Build需要 2 ∗ ( M + N ) 2*(M+N) 2(M+N),Probe需要 ( M + N ) (M+N) (M+N),故总IO复杂度为 3 ∗ ( M + N ) 3*(M+N) 3(M+N)

Conclusion

最后放一张各种算法的对照表
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高压脉冲发生器的各种电路图

高压脉冲发生器电路图一: 高压脉冲发生器的主放电回路的等效电路。其中,S是可控开关,C1是电容器组电容,R1是高压变压器输入端的损耗电阻,L1,L2分别是高压变压器初次级电感,K为耦合系数&#xff…

一篇文章看懂mysql加锁

一篇文章看懂Mysql加锁 本文主要基于Mysql8,InnoDB存储引擎范围讨论mysql的加锁,以及锁的分类,定义,使用,不同语句具体加的什么锁等。 前言 mysql锁是和事务绑定的。本文介绍了了:全局锁、表锁、行锁、MDL锁、Auto_in…

架构设计系列之基础设施能力建设

周末聊两句: 今天将的基础设施能力建设部分,一般的架构书籍中都不存在的部分,这是我在实践过程中的经验和能力总结部分,希望和大家有一个很好的交流自从在 WeChat 中开了订阅号的两周半的时间,非常感谢大家的支持&…

replace()是一个字符串替换的函数,用于将指定的字符串或模式在目标字符串中进行替换

replace()是一个字符串替换的函数,用于将指定的字符串或模式在目标字符串中进行替换。 函数原型如下: QString replace(const QString &before, const QString &after)参数说明: before:要替换的字符串或模式。after&a…

K - 近邻算法

1、算法介绍 KNN(K Near Neighbor):k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表。KNN算法属于监督学习方式的分类算法,我的理解就是计算某给点到每个点的距离作为相似度的反馈。 简单来讲,KN…

nginx中的root and alias命令的区别

Ubuntu关于Nginx的命令: 1、安装Nginx: apt-get install nginx2、查看Nginx运行状态: systemctl status nginx3、启动Nginx: systemctl start nginx4、停止Nginx: systemctl stop nginx5、重启Nginx: …

代码随想录算法训练营第十八天 | 前中后序构造二叉树

目录 力扣题目 力扣题目记录 513.找树左下角的值 递归 迭代法 总结 112. 路径总和 106.从中序与后序遍历序列构造二叉树 总结 力扣题目 用时:2h 1、513.找树左下角的值 2、112. 路径总和 3、106.从中序与后序遍历序列构造二叉树 力扣题目记录 513.找树…

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布

目录 一、实验 1. GitLabCI环境设置 2.优化GitLabCI共享库代码 3.JenkinsCD 发布后端项目 4.再次优化GitLabCI共享库代码 5.JenkinsCD 再次发布后端项目 一、实验 1. GitLabCI环境设置 (1)GitLab给后端项目添加CI配置路径 (2&#xf…

算法通关村第十二关—字符串冲刺题(黄金)

字符串冲刺题 一、最长公共前缀 LeetCode14 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串"" 示例1: 输入:strs["flower","fLow","flight"] 输出:&…

机器学习算法---时间序列

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

【力扣100】21.合并两个有序链表

添加链接描述 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -&…

SVPWM马鞍波形仿真(python)

SVPWM波的原理不再过多介绍。 最近在学习SVPWM,仿真了一下马鞍波。 python源码贡献出来。 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as anim############################################# # 我们的目的是根据机械角度&…

12.16_黑马数据结构与算法笔记Java

目录 167 B树 remove 168 B树 remove 搭架子 169 B树 remove case1-4 170 B树 remove case5-6分析 171 B树 remove case5 旋转 172 B树 remove case5 合并 173 B树 remove case6 174 B树 remove 演示1 175 B树 remove 演示2 176 哈希表 概述 177 哈希表 hash码映射索…

新视野大学英语1 词组 12.17

embarrassment和awkwardness的区别以及各自的组词。 "Embarrassment" 和 "awkwardness" 都可以用来描述一种尴尬或不舒服的感觉,但它们有一些微妙的区别。 "Embarrassment" 指的是由于尴尬、困窘或难堪的情况而产生的感觉。 这种感觉…

XXE漏洞 [NCTF2019]Fake XML cookbook1

打开题目 查看源代码 发现我们post传入的数据都被放到了doLogin.php下面 访问一下看看 提示加载外部xml实体 bp抓包一下看看 得到flag 或者这样 但是很明显这样是不行的,因为资源是在admin上,也就是用户名那里 PHP引用外部实体,常见的利用…

串口通信(5)-C#串口通信数据接收不完整解决方案

本文讲解C#串口通信数据接收不完整解决方案。 目录 一、概述 二、Modbus RTU介绍 三、解决思路 四、实例 一、概述 串口处理接收数据是串口程序编写的关键

(2)Linux 操作系统||基本创建与操作

本章将浅谈一下 "操作系统是什么" 的问题,随后通过讲解一些 Linux 下的基本指令,显示目录内容、跳转操作和文件的创建与删除。在讲解的同时我会穿插一些知识点,比如 Linux 隐藏文件、路径等基础知识。 了解操作系统 什么是操作系统…

【Java 并发】三大特性

在 Java 的高并发中,对于线程并发问题的分析通常可以通过 2 个主核心进行分析 JMM 抽象内存模型和 Happens-Before 规则三大特性: 原子性, 有序性和可见性 JMM 抽象内存模型和 Happens-Before 规则, 前面我们讨论过了。这里讨论一下三大特性。 1 原子性 定义: 一个…

第十一章 算法复杂度

11.1 大O表示法 它用于描述算法的性能和复杂程度。分析算法时,时常遇到以下几类函数: 11.1.1 理解大O表示法 如何衡量算法的效率?通常是用资源,例如CPU(时间)占用、内存占用、硬盘占用和网络 占用。当讨论…

时序预测 | Python实现GRU电力需求预测

时序预测 | Python实现GRU电力需求预测 目录 时序预测 | Python实现GRU电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用该…