数据库系统 ##一趟扫描算法

数据库系统

一趟扫描算法

查询算法概述

sql语句->关系代数表达式->基本操作(交并差乘投影)
优化:合适的基本操作执行顺序(逻辑顺序优化),
      合适的基本操作实现(物理查询计划)
三大类操作:一次单一元组(记录)的一元操作:投影选择 迭代器算法
            整个关系(表)的一元操作:分组排序去重复等 一/两/多趟扫描
            整个关系的二元操作:交并连接

连接操作的实现

逻辑算法实现:2重循环
物理算法实现:
    考虑磁盘到内存的IO操作的费时性,特别考虑降低IO行为
    复杂度:只考虑IO操作的读取块次数
    应用条件:需要的内存页的最小个数
    基本实现:两重循环读取块,3块内存即可
    全主存实现:全部块都载入内存
    半主存实现:某个关系全部载入,另一个每次读一块
    大关系实现:将一个关系分成多组读入,令一个关系每次读入一块

迭代器

查询策略:
    物化计算策略:每次对所有记录进行一步操作,保留每一个中间结果,一个关系 操作扫描一遍数据库
    流水线计算策略:使用迭代器进行一系列操作,一组关系操作扫描一遍数据库
迭代器:每次读取下一条记录的类
    Open
    GetNext
    Close
    使用迭代器完成对单一元组的一元操作

一趟扫描算法:内存数据结构保存所有记录

表数据读取进内存
聚簇关系存放:磁盘块连续存放
    表空间扫描:B(R)存储块数目
    排序表空间扫描:载入时且排序,扫描结果排序3B(R)
非聚簇:
    表空间:T(R)存储元组数目最坏情况每个元组都在不同的块
    排序表空间:T(R)+2B(R)
一元操作
去重复:
    建立内存数据结构(有序表,散列等),来保存之前处理过的数据,以便快速处理整个关系
分组:
    保存所有分组的聚集信息(散列等)
二元操作
基于集合的:去重复判断
基于包的:统计次数
连接操作:可以用散列函数快速连接

基于索引的选择和连接算法

选择:先利用索引做选择减少IO操作,不在需要载入所有数据块
连接:两个关系都有属性Y的B+树稠密索引,zigzag双指针在两树叶子上
    向后移动快速判断是否能够连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值