【CMU 15-445】Proj3 Query Execution

Query Execution

  • 通关记录
  • Task1 Access Method Executors
    • SeqScan
    • Insert
    • Update
    • Delete
    • IndexScan
    • Optimizing SeqScan to IndexScan
  • Task2 Aggregation & Join Executors
    • Aggregation
    • NextedLoopJoin
  • Task3 HashJoin Executor and Optimization
    • HashJoin
    • Optimizing NestedLoopJoin to HashJoin
  • Task4 Sort + Limit Executors + Window Functions + Top-N Optimization
    • Sort
    • Limit Executor
    • Top-N Optimization Rule

CMU-15445汇总
本文对应的project版本为CMU-Fall-2023的project3
由于Andy要求,本博客只提供思路,不会公开任何代码

通关记录

在这里插入图片描述

Task1 Access Method Executors

Task1涉及各种基本算子的实现。

SeqScan

顺序扫描算子非常简单,遍历表堆中的所有记录即可(使用MakeIterator方法),同时,可以将filter放到SeqScan中做,减少上层算子的计算时间。

Insert

插入算子直接调用InsertTuple方法即可,同时,需要遍历所有索引,插入新的索引键值对。

Update

更新算子需要根据plan的target_expressions进行新记录的构建,然后将表堆中的旧记录删除(设置tuple_meta的is_deleted字段),并插入新纪录,最后更新索引(也是删除旧索引项+插入新索引项)。

Delete

删除算子很简单,删除表堆中的记录并删除对应索引项。

IndexScan

索引扫描算子可以直接从索引中查找符合条件的记录(ScanKey)方法,遍历所有记录并返回即可。

Optimizing SeqScan to IndexScan

递归遍历计划树,将符合条件的SeqScan计划,转化为IndexScan计划即可。

Task2 Aggregation & Join Executors

Aggregation

聚合算子采用哈希表实现,在init阶段将所有的键值对构造好,然后逐一遍历返回即可。

NextedLoopJoin

嵌套循环连接算子也比较简单,就是直接双重循环,判断两边的记录是否满足连接条件即可。

Task3 HashJoin Executor and Optimization

HashJoin

使用右表的连接值作为key去构造哈希表,然后遍历左表,将左表的连接值作为key到哈希表中查找,构造新记录即可。

Optimizing NestedLoopJoin to HashJoin

简单的条件判断以及算子转换而已。

Task4 Sort + Limit Executors + Window Functions + Top-N Optimization

Sort

利用lambda函数+sort直接排序即可

Limit Executor

没啥难度,直接返回前几个记录而已。

Top-N Optimization Rule

将包含sort和limit的查询,优化为topN查询,采用大顶堆或小顶堆来优化查询效率即可。

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

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

相关文章

vue分类

先看效果 再看代码 <category-tab v-model"params.area" name"地区" :list"areaList" /><category-tab v-model"params.type" name"类型" :list"typeList" /><category-tab v-model"params.…

如何让AI 帮你生成 git 提交信息

在协同开发的项目中&#xff0c;我们肯定避免不了使用git提交代码&#xff0c;所以经常会看到了一些描述不清的提交信息。当遇到种情况时&#xff0c;我们也不必为此责怪开发人员&#xff0c;因为我们确实很难记住你在 git 提交时刚刚做了什么。 Nutlope / aicommits 一个使用 …

Linux内核中user、sys、iowait计算

Linux源代码路径: kernel/sched/cputime.c void account_user_time(struct task_struct *p, u64 cputime) {int index;/* Add user time to process. */p->utime += cputime;account_group_user_time(p, cputime);index = (task_nice(p) > 0) ? CPUTIME_NICE : CPUTIM…

编译原理:代替LR的MP:2.遇到的问题

用指针加速 MP是multi-pass&#xff0c;多遍分析法&#xff0c;它是从“先乘除后加减”中得来的灵感。在实践中&#xff0c;发现C语言优先级有15级&#xff0c;如果将源代码处理15遍&#xff0c;每一遍都从头开始找&#xff0c;势必很慢。所以&#xff0c;有了用指针加速的想法…

Attention机制到底是什么?

AI算法之一 的Attention机制到底是什么&#xff0c;你知道吗? 这里写目录标题 1. Attention 的本质2. Attention的3大优点3. Attention的原理3.Attention的类型3.1计算区域3.2 所用信息3.3 结构层次 4. 模型方面5. 相似度计算 1. Attention 的本质 Attention&#xff08;注意…

Redis 面试热点(二)

在前一篇文章中&#xff0c;我们介绍了 Redis 的基础知识和一些常见面试问题。本文将继续探讨 Redis 面试中的一些高级话题&#xff0c;包括 Redis 的事务、Lua 脚本、缓存一致性、热 Key 问题以及 Redis 与其他数据库的对比。 1. Redis 事务 Redis 事务的特性 原子性: Redi…

构建数字化校园,开启创新教育模式

在当今信息化时代&#xff0c;教育的转型升级已成为推动社会进步与发展的关键力量。构建数字化校园&#xff0c;不仅是对传统教育模式的革新&#xff0c;更是开启一场以技术赋能教育、创新驱动成长的教育革命。这一进程旨在通过深度融合信息技术与教育教学实践&#xff0c;重塑…

hive on spark 记录

环境&#xff1a; hadoop 2.7.2 spark-without-hadoop 2.4.6 hive 2.3.4 hive-site.xml <property><name>hive.execution.engine</name><value>spark</value> </property> <property><name>spark.yarn.jars</name>&l…

【代码随想录——动态规划——第三周】

1.目标和 这里设置背包的最大长度为2100即可&#xff0c;因为题目中有说数组之和小于1000.但考虑到我们需要实行jnums[i]所以保守起见我们设置的数应该稍大于2000即可&#xff0c;这里我们设置为2100。 1.1 我的解法&#xff08;粗糙了&#xff09; func findTargetSumWays(n…

Jackson指定json的key

指定json的key ‍ ‍ 要在序列化JavaBean时指定JSON的key&#xff0c;可以使用JsonProperty​注解来指定JavaBean属性序列化到JSON时使用的key。以下是一个简单的示例&#xff1a; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.da…

品质主管的面试题目

在品质主管的面试中,面试官可能会提出一系列问题来评估应聘者的经验、技能和专业知识。以下是一些常见的品质主管面试题,你可以提前准备,以更好地展示自己的能力和适应性。 一、自我介绍与背景了解 请简单介绍一下自己,包括教育背景、工作经验等。你在过去的工作经历中,主…

数据分析------知识点(六)

如何用数据说话 确定问题 如何写好数据分析报告中的确定问题部分 数据分析报告是数据分析师展示工作成果、影响业务决策的重要工具。而确定问题是数据分析报告的第一个也是最关键的部分。只有正确地确定了问题&#xff0c;后续的分析才能有的放矢&#xff0c;产生真正的价值…

BetterZip 5软件安装包下载

BetterZip是一款功能强大的Mac解/压缩软件&#xff0c;可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍&#xff0c;以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

R语言 | 绘制带P值的差异柱状图

原文链接&#xff1a;R语言 | 绘制带P值的差异柱状图 本期教程 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游分析等内容。凡是在社群同学&#xff0c;可免费获得自2021年11月份至今全部教程&…

Docker配置代理

有时候我们在使用docker下载镜像的时候可能想要配置代理区下载那么本文就给大家分享一下docker怎么配置代理。 假设你已经有了代理&#xff0c;那就编辑/usr/lib/systemd/system/docker.service 在[Service]下添加 Environment"HTTP_PROXYhttp://127.0.0.1:6666/" E…

免费公开的源代码

虽然免费公开的软件被称为免费软件&#xff0c;但是一般不会公开源代码。另外&#xff0c;公开了源代码&#xff0c;并且可以免费使用&#xff0c;而且谁都可以自由进行修改并再次发布的软件被称为开源软件。 开源软件并不是特定企业开发的&#xff0c;大多数是由有关人士组织…

Spring 事务传播行为之Propagation.NESTED REQUIRES_NEW等探讨

当一个事务方法&#xff08;标记为Transactional(propagation Propagation.NESTED))被另一个活动事务调用时&#xff0c;它会创建一个“保存点”&#xff08;Savepoint&#xff09;作为新的事务开始点。这意味着&#xff0c;如果这个嵌套事务方法内部发生异常并导致回滚&#…

深入探讨:Spring与MyBatis中的连接池与缓存机制

深入探讨&#xff1a;Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中&#xff0c;性能优化是一个永恒的话题。而在企业级Java应用开发中&#xff0c;Spring和MyBatis是两种非常流行的框架&#xff0c;它们的连接池和缓存机制对应用程序的性能有着至关重要的…

Vue55-TodoList案例-本地存储

一、TodoList案例-本地存储 此时&#xff0c;修改对象里面的属性&#xff0c;watch监视不到&#xff01; 需要深度监视&#xff0c;就不能用简写形式&#xff01; 二、jeecg-boot中的本地存储 jeecg-boot中&#xff0c;浏览器的本地存储&#xff0c;存储的是token&#xff01;…

kali - 配置静态网络地址 + ssh 远程连接

文章目录 观前提示&#xff1a;本环境在 root 用户下kali 配置静态网络地址打开网络配置文件 kali 配置 ssh 远程连接 观前提示&#xff1a;本环境在 root 用户下 kali 配置静态网络地址 打开网络配置文件 vim /etc/network/interfaces出现一下内容 # This file describes …