暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库原理之迭代器iterator:物理查询计划和迭代器算法

原创 liaju 2021-10-08
1909

通常,作为数据库的用户操作,最多使用的就是DML,而DDL和DCL则是DBA的常规操作,通常查询类似以下逻辑:
> select A1,A2,A3...An from R1,R2,R3...Rn where cond.

SQL查询的执行过程是:

1. 通过词法分析和语法分析得到建立查询的分析树

2. 根据分析树得到其关系代数表达式即一个物理查询计划,然后将该物理查询计划转化为一个等价的查询时间较小的计划

3. 为每一个操作符(三类:一次单个元组 一元操作、单个关系 一元操作、多个关系 二元操作)选择实现算法并确定这些操作符的执行次序。之后就可以被执行引擎执行。

物理查询优化就是根据数据库中表的相关信息比如记录个数、记录长度、磁盘块个数等为每个关系代数操作选择例行程序,最后以这些例行程序作为基本步,确定执行顺序。可以看出物理查询的优化主要是例行程序的选择和例行程序的组合。(下面我们看看基本的关系代数操作符相关的算法即例行程序)


在这里插入图片描述


代数操作符的一趟算法

  1. 迭代器算法使用于单一元组一元运算和部分整个关系二元运算

在这里插入图片描述

2. 选择操作
在这里插入图片描述
3. 投影操作
在这里插入图片描述
4. R join S
在这里插入图片描述
5. 整个关系二元操作 包的并
在这里插入图片描述
6. 去重操作
在这里插入图片描述
7. 分组聚集
对于分组聚集来说我们需要在内存中保存所有的分组 及其聚集信息。比如对于MIN 则需要保存每个分组的最大值,当有新元组来时,首先看哪个分组,然后更新。
在这里插入图片描述
8. 基于块的嵌套循环连接
这种实现连接的算法是按磁盘块来访问关系的,使用尽可能多的内存来存储磁盘块。假设内存中有M-2个页可以用来装载关系S.

```
For S中的Bs(S)/M-2 个M-2 个页大小的 总块
 在读入内存的时候就对每个元组建立起数据结构比如排序 or散列 or索引
 for R中的每个块b
  将b读入内存
  for b中的每一个元组 t
   if t可以与之前读入内存的M-2S数据块中的元组 连接 输出到输出缓冲区
```
这样可以将通过查询结构将算法优化。

最后修改时间:2021-10-08 10:39:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论