IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> (P30-32)数据库系统原理下-迭代器构造查询算法 -> 正文阅读

[数据结构与算法](P30-32)数据库系统原理下-迭代器构造查询算法

1.迭代器算法的提出

数据库的三大类操作

  • 一次单一元组的一元操作
    下面是选择和投影操作,使用迭代器算法优化
    在这里插入图片描述

  • 整个关系的一元操作
    在这里插入图片描述

  • 整个关系的二元操作
    在这里插入图片描述

  • 整个关系的一元操作和二元操作可以使用以下算法进行优化
    在这里插入图片描述

2.查询实现的两种策略

在这里插入图片描述

  • 物化计算策略
    一个关系操作就会扫描一遍数据库,下面的方式会扫描三次
    在这里插入图片描述

  • 流水线计算策略
    用一系列迭代器构建流水线算法,三个操作组合在一起才扫描一遍数据库
    在这里插入图片描述

3.迭代器算法基础

迭代器: 迭代的读取一个集合中的每一个元素,而封装其读取细节

  • 面向对象的构造–可学习《面向对象程序设计语言》如C++,Java
    类 Class A { }
    类的函数/方法 Class A { void f1(){ } }
    类的继承 Class A : B
    类的实例化–对象: 例如“ a = new A; ” 或者 “A a”;
有一个抽象类
class iterator {
void Open();
tuple GetNext();//tuple元组类型
void Close();
iterator &inputs[];
}

所有关系操作可继承此迭代器进行构造。
不同操作,可以构造不同的Open(),GetNext(), Close()函数
R.Open();//打开R的关系
t := R.GetNext();//R的下一条记录
R.Close();

迭代器的构造:表空间扫描法-读取关系

  • 读取R中每一个元组的迭代器,R迭代器
Open() {
	b := R的第一磁盘块;
	t := b的第一个元组;
}
GetNext() {
	IF ( t 已超过磁盘块b的最后一个元组 ){
		将b前进到下一块
		IF (没有下一块)
			RETURN NotFound;
		ELSE /* b是一个新块 */
			t := b的第一个元组;
	}
	oldt := t;
	将t前进到b的下一元组;
	RETURN oldt;
}
Close() {
}

迭代器的构造:R∪S的算法-构造并操作的迭代器

  • Union(R,S)迭代器
Open() {
	R.Open();//迭代器R初始化
	CurRel := R;//当前关系为R
}
GetNext() {
	IF ( CurRel == R ) {
		t:= R.GetNext();//读取R的一个元组
		IF (t<> NotFound)
			RETURN t; /* 未处理完 ,找到了R∪S的一个元组*/
		ELSE { /* 已处理完R */
			S.Open();
			CurRel := S;
		}
	}
	RETURN S.GetNext();
/* S处理完返NotFound,其将NotFound再返回 */
}
Close() {
	R.Close();
	S.Close();
}

迭代器的构造:
在这里插入图片描述

  • SELECTION(R)
    一次一个元组的操作
    最少只需一个内存Block的内存空
    在这里插入图片描述
    基于R迭代器构造一个选择运算的迭代器
Open() {
	R.Open();
}
GetNext() {
	Cont:
		t:= R.GetNext();//读取R的一个元组
		IF (t<> NotFound)
			IF F(t) == TRUE
				RETURN t;
			ELSE GOTO Cont;
		ELSE RETURN NotFound;
}
Close() {
	R.Close();
}

迭代器构造:在选择迭代器的基础上构造投影迭代器
在这里插入图片描述
在这里插入图片描述

  • PROJECTION(SELECTION(R))
Open() {
	SELECTION.Open();
}
GetNext() {
	t:= SELECTION.GetNext();
	IF (t<> NotFound) {
		p := PROJECTION(t, α)//元组t按照α投影出来
		RETURN p;
	}
	ELSE RETURN NotFound;
}
Close() {
	SELECTION.Close();
}

迭代器构造:

  • R Join S
Open() {
	R.Open(); S.Open();
	r:= R.GetNext();//R的下一个元祖
}
读R的一个元祖,循环读S的一个元祖
GetNext() {
	REPEAT 
	{
		s:= S.GetNext();
		IF ( s == NotFound ) 
		{
			S读取空了,则读取R的下一个元祖,再去循环S去读
			S.Close();
			r: = R.GetNext();
			IF (r == NotFound)
				RETURN NotFound;
			ELSE 
			{ 
				S.Open();
				s := S.GetNext(); 
			}
		} 
	}
	UNTIL (r 与s能够连接);
	RETURN r和s的连接;
}

Close() {
	R.Close(); S.Close();
}
  • 与连接操作的基本实现算法的思想是一致的
    在这里插入图片描述
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:07:29  更:2021-11-15 16:08:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:36:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码