当前课程知识点:高级数据库系统 >  第二讲 查询处理及优化 >  3. 查询表达式的运算 >  2-3 查询表达式的运算

返回《高级数据库系统》慕课在线视频课程列表

2-3 查询表达式的运算在线视频

2-3 查询表达式的运算

下一节:2-4 查询优化机制

返回《高级数据库系统》慕课在线视频列表

2-3 查询表达式的运算课程教案、知识点、字幕

前面呢,我们讲了在查询树上每一个节点上的关系运算的实现算法

整个查询表达式,它是由若干个关系运算组合而成的

所以呢,我们需要知道,那么整个查询表达式它是怎么运算的呢

比如我们有这样一个查询

由内存由选择运算,外层由投影运算构成的这样一个查询

对这样的一个查询它是怎么执行的呢

对于整个查询表达式的执行实际上有两类方法

第一类呢,是实体化的方法

实体化的方法呢,比较简单

它就是从叶子节点也就是从树的最底层开始

输入关系利用前面我们讲的一些算法输入关系

然后在每一个节点上进行一些运算

比如说选择运算,这个自然连接运算

这些运算呢,都用我们前面讲过的

比如说基于排序的或者基于散列的或者基于索引的运算

那么运算完之后产生的中间结果

我们要把它写回到磁盘上,作为一个临时关系或者是作为上层运算的一个输入

这是实体化的方法,那么实体化的方法呢

因为要把中间节点的运算写回到磁盘还要写入

所以呢,它的代价就比较高一些

也就说它是要把所有运算的代价再加上把中间结果写出写入的这样一个代价

在这种方法当中呢,我们就需要统计中间结果的大小

因为中间结果我们要写出还要写入

如果我不知道它的大小,我们就没有办法来估计它的代价

那么要统计中间结果的大小呢,需要一些元数据

关于中间结果大小的统计如何去计算呢

这里我也不做详细的介绍,也是在高级数据库技术这本书里面有详细的描述

但是呢,要大家知道,也就说中间结果实际上是需要一些元数据的统计

它不是说我运算完了之后才给出来

而是在运算执行之前需要用语言数据

比如说那个关系的元组的个数呀,它的大小占有多少个磁盘块

以及呢,比如说它某一个属性它不重复取值的个数等等

要用这样的一些元数据呢来进行估量,估算

那ppt上呢,给出了一些典型运算的中间结果的估计值

这是实体化方法来执行一个完整的查询

执行查询语句的另外一种方法叫做流水线方法

流水线方法呢,是一种比较理想化的直线方法

它是想把所有的运算都组成一个流水线

那么一个运算的结果传送到下一个运算

从而去掉了临时把中间结果写出到磁盘和写回这样的一种代价

那么当然这是非常理想的,比如说拿到一个运算

我们前面一个比如说内层是连接运算,外层是投影运算的话

它就希望构造这样的一种流水线运算

比如说从这个数据库里面,把两个这个关系的元组拿出来之后

直接在内存里面进行运算,运算呢,比如说直接进行连接运算

连接运算的结果放到缓冲区里面

然后这个缓冲区里的数据就作为下一个投影运算的输入

这就是流水线的这样一种非常简单的例子

但是这样一种理想的方法呢,在实现的时候是比较困难的

一般的情况下我们都是采用进程或者是现成建模

从流水线的这个输入接出元组,并且产生一个元组作为下一个输出

但是呢,我们说作为现成建模像这样的一种方式是比较不太稳定的

我们用它这种方式来写的程序,它的稳定性要差一些

那为什么会差一些呢,主要呢是因为两个操作,它们的数据依赖性太强了

这样的话,我们很难去调节

一个操作是否能够正确的为下一个操作提供数据

那么它们中间稍微出一点差错的话,这个程序很可能就会崩溃

你比如说上一个操作,如果产生元组特别多,缓冲区承不下,溢出

那怎么办,或者说上一个操作太慢了,下一个操作非常快,是吧

它要等,它要等多长时间呀

如果它等的这个时间不合适的话,那么这个效率也会受到影响

所以流水线的方法,虽然从这个我们理论的角度上来说是非常理想的一种状态

但在实现的时候呢,就会出现这样的问题

也有人提出一些解决方法,比如说有一种叫做需求驱动这样的一种方式

这种方式呢,就说我呢,可以根据需求来请求数据

比如说我下一层的这个计算,下一层节点的计算

它不断的去向上一层的运算去请求它需要的元组

这个实际上叫需求驱动

我们把它叫做这样的一种,拉的这样的一种方式

那么还有一种呢,叫做生产者驱动

生产者驱动是指什么呢,就是我这个前一个

也就说我这个前一个运算节点产生的数据去推动着下一个运算它的执行

也就是说我前一个不断积极的产生数据

数据产生的差不多了,然后就通知下一个运算

它要赶紧去运算,否则这个数据就太多了

但是这仍然是一种非常理想的情况

因为计算机毕竟不像人类一样那么智能

它需要感知到比如说我什么时候需要数据

我什么时候产生的数据够了去通知下一个节点呢

所以这个在实现起来仍然是相当困难的

那么另外一个呢,也就是说流水线方法呢

还有一个比较大的限制就是

它对一些前面我们讲的一些关系运算的时间算法会产生一些限制

比如说那如果我的连接运算使用基于索引的算法的话呢

我使用流水线是没有问题的,但如果我要使用归并算法

那么这个连接运算肯定不能用流水线的方式来实现

因为归并运算必须要产生有序子表

所以这呢,就说我在内存里面我是没有办法来存储它的

那么也正是由于这个原因,所以呢,流水线的方法

那么和实体化的方法来比较来说

无论是从这个程序的编制,还是从它实现的代价

那都是非常高的,代价非常高

而实体化的方法虽然说很朴素

那么比如说它也涉及到数据的临时结果的写入写出

但是呢,它是原理简单,实现容易

这个程序编出来之后呢,它的稳定性好,容纳性强

所以呢,很多数据库管理系统,那么商品化的产品

它都要使用实体化的方法来进行整个查询系统的处理

那么但是有同学可能就要问说

这种方法代价比较低呀,那怎么办呢

那么我们可以采用其他的一些技术

比如说我可以采用双缓冲技术来提高实体化方法的这样一种效率

这都是没有问题的

高级数据库系统课程列表:

第一讲 数据文件的组织与索引技术

-1. 数据文件的组织

--1-1 数据文件的组织

-2. 索引的概念与分类

--1-2 索引的概念与分类

-3. B+树索引

--1-3 B+树索引(1)

--1-3 B+树索引(2)

-4. 散列索引

--1-4 散列索引

-5. 小结

--html

-6.练习--作业

第二讲 查询处理及优化

-1. 查询代价的测量及查询处理过程概述

--2-1 查询代价的测量及查询处理过程概述

-2. 关系操作的基础算法

--2-2. 关系操作的基础算法(1)

--2-2. 关系操作的基础算法(2)

-3. 查询表达式的运算

--2-3 查询表达式的运算

-4.查询优化机制

--2-4 查询优化机制

-5.小结

--html

-6.练习--作业

第三讲 数据管理与恢复技术

-1. 数据库的故障及可恢复模型

--3-1. 数据库的故障及可恢复模型

-2. 事务及日志的相关概念

--3-2. 事务及日志的相关概念

-3. 基于undo日志的恢复机制

--3-3. 基于undo日志的恢复机制

-4. 基于redo日志的恢复机制

--3-4. 基于redo日志的恢复机制

-5. 小结

--html

-6. 练习--作业

第四讲 事务并发调度的相关概念

-1. 并发调度及相关概念

--4-1. 并发调度及相关概念

-2. 可串行化调度

--4-2. 可串行化调度

-3. 冲突可串行化调度

--4-3. 冲突可串行化调度

-4. 小结

--html

-5. 练习--作业

第五讲 基于封锁的并发控制机制

-1. 锁的概念及封锁的原理

--5-1. 锁的概念及封锁的原理

-2. 两阶段锁协议

--5-2. 两阶段锁协议

-3. 多粒度锁及意向锁

--5-3. 多粒度锁及意向锁

-4. 死锁的处理

--5-4. 死锁的处理

-5. 小结

--html

-6. 练习--作业

第六讲 并发控制的其它机制

-1. 基于时间戳的调度

--6-1. 基于有效性检验的调度

-2. 基于有效性检验的调度

--6-2. 基于时间戳的调度

-3. 小结

--html

-4. 练习--作业

第七讲 分布式数据库基本概念

-1. 分布式数据库系统的产生及定义

--7-1. 分布式数据库系统的产生及定义(1)

--7-1. 分布式数据库系统的产生及定义(2)

-2. 分布式数据库系统的模式结构与功能结构

--7-2. 分布式数据库系统的模式结构与功能结构

-3. 分布式数据库系统中存在的技术问题

--7-3. 分布式数据库系统中存在的技术问题

-4. 小结

--html

-5. 练习--作业

第八讲 分布式数据库的设计

-1. 分布式数据库的设计方法、内容和目标

--8-1. 分布式数据库的设计方法、内容和目标

-2. 自顶向下方法构建数据库

--8-2 . 自顶向下方法构建数据库

-3. 数据的分片和分布设计

--8-3. 数据的分片和分布设计(1)

--8-3. 数据的分片和分布设计(2)

-4. 分布式数据库设计案例讲解

--8-4. 分布式数据库设计案例讲解(1)

--8-4. 分布式数据库设计案例讲解(2)

--8-4. 分布式数据库设计案例讲解(3)

-5. 小结

--html

-6. 练习--作业

第九讲 分布式数据库查询机制

-1. 分布式查询处理的步骤和代价

--1. 分布式查询处理的步骤和代价

-2. 基于等价变换的查询优化

--2. 基于等价变换的查询优化

-3. 基于半连接算法的查询优化

--3. 基于半连接算法的查询优化

-4. 基于直接连接算法的查询优化

--4. 基于直接连接算法的查询优化

-5. 小结

--html

-6. 练习--作业

第十讲 分布式数据库的事务管理及恢复机制

-1. 分布式事务概述

--1. 分布式事务概述

-2. 分布式事务的两阶段提交协议

--2. 分布式事务的两阶段提交协议

-3.分布式并发控制概述

--3.分布式并发控制概述

-4. 并发控制的加锁机制

--4. 并发控制的加锁机制

-5. 并发控制的时标技术

--5. 并发控制的时标技术

-6. 小结

--html

-7.练习--作业

高级数据库技术期末试题

-试题--作业

2-3 查询表达式的运算笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。