CMU Database Systems - Query Processing

栏目: 数据库 · 发布时间: 7年前

内容简介:Query处理有三种方式,首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式

Query Model

Query处理有三种方式,

CMU Database Systems - Query Processing

首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式

他是top-down的模式,通过next函数去逐层获取tuple

好处是比较简单,并且很容易做limit

CMU Database Systems - Query Processing CMU Database Systems - Query Processing

iterator的例子,

输出一个数据,从top开始调用next,这里第二步需要join,建hashtable,需要把3的数据全部读取上来

CMU Database Systems - Query Processing

第二种方式,materialization model

反其道,这是一种bottom-up的方式,每个把数据都准备好后,往上传递

这种方式,明显适合TP,对于AP会产生大量的中间结果,

而且不好控制limit,limit1,底下节点可能也要把所有的数据都读出来

CMU Database Systems - Query Processing CMU Database Systems - Query Processing

Materailization Model的例子,

多了个out,来记录返回的全量结果

CMU Database Systems - Query Processing

Vectorization Model

向量化模型,iterator的时候每次取一个batch,而不是一个tuple

这样大大降低next的调用频率,而且可以更好的利用SIMD进行并行处理

CMU Database Systems - Query Processing CMU Database Systems - Query Processing

Vectorization Model的例子,

加上对out大小的判断以形成batch

CMU Database Systems - Query Processing

3种模型的区别如下,

CMU Database Systems - Query Processing

Access Methods

刚刚的查询计划里面,只是说读取数据,但是没有怎么说如何读取数据

Access Methods就是说明如何从数据库中读取数据的

Access Methods也有三种,

Sequentail Scan,Index Scan, Multi-Index/'Bitmap' Scan

Sequential Scan

顺序读,就是一个个page这么读过去,然后用一个内部的cursor去记录读到哪儿了

CMU Database Systems - Query Processing

顺序读会比较慢,但有时是无法避免的

优化的方法如下,

预取,并行化,bypass bufferPool,都是前面说过的优化

CMU Database Systems - Query Processing

Zone Maps

在每个page上加上一些统计信息,又称为pre-computed aggregates

这样我就可以根据这个信息来判断是否需要读这个page

CMU Database Systems - Query Processing

Late Materialization

这个只能用于列存,因为列存才能一次读一列,

所以在前两个过滤条件上,我们只需要把offset传上来,不需要原始数据

到最后一步,才需要把C这一列真正的materialization出来

CMU Database Systems - Query Processing

Heap Clustering

Tuples在pages中是按照clustering index排序的,所以根据clustering index进行query是非常高效的

CMU Database Systems - Query Processing

但是如果要按非clustered index的字段进行排序,就是比较低效的

因为tuples会分布在不同的pages中,你需要混着读

一个优化是,把所有要读的tuples按page id进行排序,然后一个个page顺序读过来会比较高效

CMU Database Systems - Query Processing

Index Scan

关键就是如何pick合适的index来进行查询,这个比较复杂,在后面会详细描述

CMU Database Systems - Query Processing

Multi-index Scan

同时用多个index进行索引,

然后对多个索引的结果集,进行union和intersect,最终得到结果

CMU Database Systems - Query Processing CMU Database Systems - Query Processing

intersection往往通过bitmaps,hash tables,bloom filters来实现,所以有时也称为Bitmap Scan

CMU Database Systems - Query Processing

Expression Evaluation

SQL中的表达式,可以通过expression tree来表示,这种方式很灵活,但是性能比较差,所以比较高效的方式是直接codegen

CMU Database Systems - Query Processing

CMU Database Systems - Query Processing


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

微交互

微交互

塞弗 (Dan Saffer) / 李松峰 / 人民邮电出版社 / 2013-11-1 / 35.00元

平庸的产品与伟大的产品差就差在细节上。作者Dan Saffer将通过这本书展示怎么设计微交互,即位于功能之内或周边的那些交互细节。你的手机怎么静音?你怎么知道有新邮件了?怎么修改应用的设置?诸如此类的交互细节,既可以毁掉一个产品,也可以成就一个产品。高效而有趣的微交互 ,涉及触发器、规则、循环和模式,还有反馈。透过书中生动、真实的设备及应用示例,读者将理解微交互对于塑造产品个性、赋予产品卖点的重要......一起来看看 《微交互》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具