数据库物理查询计划和迭代器算法

  • 作为普通用户 我们最多使用的就是DML对于DDL和DCL是数据库管理员该干的事情,那么普通的
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数据块中的元组 连接 输出到输出缓冲区

这样可以将通过查询结构将算法优化。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值