数据库系统实现 第六章 查询执行

第六章 查询执行

查询执行也就是操作数据库的算法

一次查询的过程:

查询-->查询编译(第七章)-->查询执行(第六章)-->数据

查询编译预览

查询编译可以分为三个步骤:

a)分析:构造分析树,用来表达查询和它的结构

b)查询重写,分析树被转化为初始查询计划,通常是代数表达式,之后初始的查询计划会被优化为一个时间更小的计划

c)物理计划生成,将查询计划转化成物理的计划,

为了选择更好的查询计划,需要判断

1)查询哪一个代数的等价形式是最有效的

2)对选中形式的每一个操作,所使用的算法选择

3)数据如何从一个操作转向另一个操作,比如流水线的方式还是,主存缓冲区还是通过磁盘。这些选择依赖于关系的大小,统计数据,某些索引的存在以及数据在磁盘上的分步。

关系代数的操作符包括

1)并,交,和差

2)选择

3)投影

4)乘积

5)连接

6)消除重复

7)分组

8)排序

表达式树

对于任何操作,我们可以将几个操作符的应用画成一个表达式树,这些树的叶节点是关系的名字,内部节点为操作符,每个操作符操作的是他的儿子节点。

物理查询计划操作符

物理查询计划由操作符构造,每一个操作符实现计划的一步,物理操作符常是一个关系代数操作符的时间。当然物理操作符有时完成的与关系代数无关,例如,扫描一个表。

扫描表

无力查询计划中最基本的事是读一个关系R的整个内容,例如将R与另一个关系做并连接的时候,这一步是必须的,扫描的方式有两种

1)很多时候,关系R存放在二级存储器中的某些区域,元组排放在块中,一个接一个的扫描块,叫做表-扫描

2)如果关系R种某一属性有索引,可以使用索引来得到R的元组,这种叫索引-扫描

扫描表时的排序

实现排序-扫描的方法有三种

a)如果我们想要按照属性a来排序关系R,并且a上有一个B数索引,或者R是按a排序的,那么对索引扫描即可得到顺序的R

b)如果R可以装进内存,那么可以采用内存排序算法

c)如果R很大不能完全装进内存,那么可以采用外存排序的方式,如两阶段多路归并

转载于:https://www.cnblogs.com/icodefive/p/7425554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值