CMU《数据库系统导论》(2019) by Andy Pavlo Lesson 12 个人笔记

本文介绍了CMU《数据库系统导论》中的查询实现方法,包括迭代器模型(如火山模型和管道模型)、materializationmodel、vectorizationmodel及其在OLTP和OLAP场景下的适用性,以及数据结构如zonemap、latematerialization和索引优化策略如heapclustering、multi-indexscan和expressionevaluation。讨论了两种queryplantree设计的优缺点。
摘要由CSDN通过智能技术生成

CMU《数据库系统导论》(2019) by Andy Pavlo Lesson 12 个人笔记

作者 AlexFisher

查询实现

iterator model(火山模型、管道模型)

每一个iterator都有一个Next()函数来返回给父节点符合当前条件的下一个元组,通过一个查询树来实现整个查询。
优势:1.对于limit条件很友好,因为每次调用最上层函数的Next函数只返回一个元组。2.容易并行执行。(在下一课中提到)

materialization model

每个iterator一次性返回全部符合条件的结果。
可以让系统对执行器进行提示来避免返回过多的结果,也可以指定其返回固定的列的结果。

better for OLTP, not OLAP

vectorization model

每个iterator其一次性返回一批元组组成的向量,需要将iterator内部处理元组的方式改为向量化的一次性处理一批元组的方式(SIMD)。

better for OLAP

加速顺序查找

预取、缓存池

较简单,不详述

zonemap

每一个存放数据的页面都拥有一个zonemap,存储了描述该页面所有元组的一些信息,如min,max,sum等。
用途:若查找的条件为id>xxx,而某个页面zonemap记录的max id<=xxx,则可以跳过该页面,减少了需要查找的页面数量。

late materialization

返回的结果存放元组id而非元组本身。
应用场景:对于列存储表来说,获取一整个元组的代价较大,而传递到上层后可能实际需要的数据只是某几列(projection)。

heap clustering

按照主索引顺序获取页面更快哦

加速索引查找

主要在于如何选择最合适的索引来查找

multi-index scan

如果同时有多个索引都很适合用来查找,则对这两个索引都进行查找,然后对结果取交或者并(取决于查询)
例如: select * from s where s.id>100 and s.age<30
如果s.id和s.age的选择结果都比较显著,则对两者都进行查找,然后将两者生成的两个元组集合取交集。(可以用bitmap、hashtable、bloom filter之类的实现)

index scan page sorting

对于非聚合索引,可以先获取所有满足条件的数据所在页的page id,然后对page id进行排序,再获取真实元组数据以避免对同一个页面间隔性的重复访问引起IO次数暴增。

expression evaluation

select * from s where 1=1
如果实现能够实现简化where条件则可以省去树上许多不必要的查询。
许多DBMS使用JIT(即时编译)来实现该功能。

两种query plan tree

top-down:符合人类直觉,易于维护,但重复的函数调用可能会导致cpu效率降低。
bottom-up:函数调用更少,cpu效率更高,但不符合直觉,比较难coding

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值