【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

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

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

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

相关文章

华媒舍:打造出色科普文章的10步路透社发稿手册

1.科普文章的编写是一项让科技知识更为浅显易懂重要工作。下面我们就详细介绍路透社的发稿手册,带来了好用的流程,协助作者从零开始创作出色的科普文章。 2.明确主题风格在创作科普文章以前,首先要明确要介绍的主题风格。选择一个有趣且适合…

verilog语法进阶,时钟原语

概述: 内容 1. 时钟缓冲 2. 输入时钟缓冲 3. ODDR2作为输出时钟缓冲 1. 输入时钟缓冲 BUFGP verilog c代码,clk作为触发器的边沿触发,会自动将clk综合成时钟信号。 module primitive1(input clk,input a,output reg y); always (posed…

【C++11特性篇】探究【右值引用(移动语义)】是如何大大提高效率?——对比【拷贝构造&左值引用】

前言 大家好吖,欢迎来到 YY 滴C11系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.【左值&左值引用】和【右值&a…

Leetcode 删除有序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成 示例 1: 输入&…

超声波清洗机哪个好?怎么样挑选清洗力比较强超声波清洗机

大部分的年轻人,现在因为各种原因,戴眼镜的人群不再是局限于学生,很多打工族或者是老人也戴上了眼镜,近视眼或者是老花眼都有。戴眼镜的人群越来越多,会有很多人忽视眼镜清洗这个事情,眼镜长时间不清洗的话…

多层记忆增强外观-运动对齐框架用于视频异常检测 论文阅读

MULTI-LEVEL MEMORY-AUGMENTED APPEARANCE-MOTION CORRESPONDENCE FRAMEWORK FOR VIDEO ANOMALY DETECTION 论文阅读 摘要1.介绍2.方法2.1外观和运动对其建模2.2.记忆引导抑制模块2.3. Training Loss2.4. Anomaly Detection 3.实验与结果4.结论 论文标题:MULTI-LEVE…

云渲染技术下的虚拟现实:技术探索与革新思考

虚拟现实(含增强现实、混合现实)是新一代信息技术的重要前沿方向,是数字经济的重大前瞻领域,将深刻改变人类的生产生活方式,产业发展战略窗口期已然形成。但是虚拟现实想要深入改变影响我们的生活,以下技术…

PyQt6 QToolBar工具栏控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计44条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【QT】时间日期与定时器

目录 1.时间日期相关的类 2.日期时间数据与字符串之间的转换 2.1 时间、日期编辑器属性设置 2.2 日期时间数据的获取与转换为字符串 2.3 字符串转换为日期时间 3.QCaIendarWidget日历组件 3.1基本属性 3.2 公共函数 3.3 信号 4.实例程序演示时间日期与定时器的使用 …

Linux c++开发-06-使用Linux API 进行文件的读写

先简单的介绍一下open,read,write 先用open接口去打开文件,flag表示打开文件的权限不同。 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);示例 结果:

学习MS Dynamics AX 2012编程开发 2. X++语言

X是用于构建Dynamics AX功能的编程语言。X是一种与C类似的面向对象编程语言。 完成本章后,您将能够理解X语言;您将知道可用的数据类型是什么,如何创建各种循环,如何比较和操作变量,在哪里可以找到预定义的函数&#x…

TypeScript编译环境配置

TypeScript 安装和配置 全局安装TypeScript语言的编辑器npm i -g typescript用vscode打开项目文件夹,右键选择在终端中打开,在终端中输入tsc -int // tsc是ts语言的编译器,c是compile的意思 ,编译结果:在当前项目文件…

Java与前端:风云变幻的技术之路

前言 近日,有关“Java已死、前端已凉”的言论在IT圈内流传甚广,引起了广泛关注和讨论。这究竟是真相还是一场对技术人员的焦虑贩卖呢?让我们一同探讨这场技术风暴带来的变化与机遇,并分享一些实用的建议。 一、技术变革的常态 …

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…

探索顺序表:数据结构中的秩序之美(c语言实现常见功能接口)

在我们的数据结构探索中,我们已经探讨时间复杂度、空间复杂度。大家可以移步到我的上篇文章: 打开数据结构大门:深入理解时间与空间复杂度 今天,我们将深入研究另一个重要的主题——顺序表 全部的源代码大家可以去我github主页…

【LangChain学习之旅】—(1) 何谓 LangChain

Reference:LangChain 实战课 【LangChain学习之旅】— 何谓 LangChain 如何理解 LangChainLangChain 中的具体组件LangChain调用ChatGPTLangChain代理功能 如何理解 LangChain 作为一种专为开发基于语言模型的应用而设计的框架,通过 LangChain&#xff…

07-抽象工厂

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 适用性 在以下的情况可以选择使用抽象工厂模式: 一个系统要独立于它的产品的创建、组合和表示。一个系统要由多个产品系列中的一个来配置。要强调一系列相关的产品对象的…

关于Ubuntu22.04恢复误删文件的记录

挂载在Ubuntu22.04下的固态盘有文件被误删了,该固态盘是ntfs格式的。 在网上找了很多教程,最后决定用TestDisk工具进行恢复。 现记录如下: Ubuntu安装testdisk sudo apt-get install testdisk运行testdisk sudo testdisk得到 我选择的是…

不是生活有意思,是你热爱生活它才有意思

明制汉服的设计 同样是一款很重工的外套 细节上也是做到了极致 顺毛毛呢面料 领口袖口拼接仿貂毛环保毛条 前胸欧根纱刺绣圆形布 袖子贴民族风珠片刺绣织带 门襟搭配金属子母扣,真盘扣设计 时尚经典,搭配马面裙孩子穿上 真的很有气质奢华富贵 …

Day10 Liunx高级系统设计11-数据库2

DQL:数据查询语言 查询全表 select * from 表名; 查询指定列 select 列名 1, 列名 2,… from 表名 ; 条件查询 select * from 表名 where 条件 ; 注意: 条件查询就是在查询时给出 WHERE 子句,在 WHERE 子句中可以使用如下运算符及关键 字&#…