Bill的数据库学习笔记-projection投影, set, avg等

写在前面

我们在之前几篇文章中讲到了几种最基础的indexing、以及join的实现,接下来将会讲到数据库的projection、查询语句优化等算法。

Projection 是什么

表示我们希望文档在结果中集中的形状,比如

SELECT first_name, last_name, email
FROM customers;

那么我们只想我们最后的结果中展现出 first_name, last_name, email这三列的数据

SELECT DISTINCT
R.sid, R.bid
FROM Reserves R

这也是投影,实现了distinct的结果

基于sorting

  • 使用external sort(之前已经讲述)来进行排序,并将其中不需要的列去除
  • merging来去除重复的部分
  • 损耗
    • 读取,排序
    • 找到所有重复的
    • O(M logM)

基于hashing的 projection

  • Partition:
    • 使用一个输入buffer来读取R,对于每一个tuple来说,都需要丢弃不需要的fields,并且使用h1来将其放到b-1个partition中去
    • 对于每一个partition来说,都需要读取并使用一个in memory hash table, 将h1和h2来进行比较,同时丢失所有的duplicates

projection 总结

  • 基于sort的方法是业界标准。

  • 可以基于index来进行scan

  • Ordered index,如果index是ordered,那么其scan的速度会更快

Set

  • Union and Except similar
  • 基于sorting的union
    • 首先将两个关系都进行排序,并将重复的
    • 对已经排序的relation进行扫描,并将其merge(external (merge)sort)
  • 基于hash的union
    • 将r和s使用hash function分为很多个partition
    • 对于每一个s partition,在memory中建立一个hash table,扫描对应的r tuples,将r和s进行对应,将对应r中的tuples放到table中去,同时丢失重复的部分

hash-join的pseudocode
在这里插入图片描述

AVG,MIN

  • 这些操作如果不用group by的话,会需要对整个relation进行扫描。如果index包含了select中需要的所有的attributes,则可以进行index only scan。

在这里插入图片描述

  • 如果使用grouping的话
    • 如果使用group-by这个attributes,对针对每一个group来进行aggregate,即先根据group by的每一个参数进行partition,再将这些partion进行join ,再进行avg, min等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值