数据库系统
2023-4-17~2023-4-23
第九周小结
第十七讲–数据库查询实现算法(两趟扫描)
1.两趟扫描基本思路
第一趟,划分子集,子集具有某种性质(如有序、散列值相同);
第二趟,处理全局性内容,形成结果关系;
2.外排序问题
内存共B_memory块,每块可装载R_block条记录;
待排序数据R_problem条记录,共占用B_problem块;
应用:子集合数N<B_memory(归并时一块用于输出);子集合块数≤B_memory;大数据集块数<B_memory²(两趟扫描的要求);
不考虑结果写回3B®,考虑结果写回则为4B®–子集合排序读一遍写一遍,归并读一遍写一遍;
例如,内存共8块,设计排序方案,排序70块数据集,读写次数最少;
3.去重复操作
第一趟,划分子表,进行子表排序;
第二趟,归并阶段,在排序的基础上,直接将重复的记录剔除(不输出);
算法复杂性,同TPMMS(不考虑输出–3B®;考虑输出4B®);
4.分组操作
第一趟,划分子表,进行子表排序;
第二趟,归并阶段,将不重复的记录,作为新分组输出,重复记录进行分组聚集计算;
算法复杂性,同TPMMS(不考虑输出–3B®;考虑输出4B®);
5.并操作
包上的并操作无需两趟,直接合并即可;
集合上的并操作:
第一趟,划分R和S的子表,进行子表排序;
第二趟,归并阶段,R和S两路输入之间去重复性合并输出;
6.交操作
包、集合上的操作都需要两趟;
第一趟,划分R和S子表,子表排序;
第二趟,归并阶段,R和S的两路输入按要求输出(集合–都出现才输出;包–输出元组的次数为R和S中出现的最小次数);
7.差操作
包、集合上的操作都需要两趟;
第一趟,划分R和S子表,子表排序;
第二趟,归并阶段,R和S的两路输入按要求输出(集合–出现在R中不出现在S中的才输出;包–输出元组的次数为R的次数-S的次数);
8.连接操作
9.基于散列的两趟扫描算法
第一趟,散列子表,用散列函数hp将原始关系划分为M-1个子表并存储;
第二趟,处理每个子表,用另一个散列函数hr将子表读入内存,进行不同操作的处理;
第十八讲–数据库查询优化技术
1.查询优化的三个层面
语义优化,利用模型的语义及完整性规则,优化查询;
语法优化(逻辑层优化),利用语法结构,优化操作执行顺序;
执行优化(物理层优化),村区路径和执行算法的选择与执行次序优化;
2.逻辑层优化策略
(1)尽可能早做选择和投影(中间结果变小);
(2)选择和投影串接起来(一元运算序列可一起执行,只需要扫描一遍);
(3)投影与其前、后的二元运算结合起来(减小元组的长度);
(4)把某些选择与其前的笛卡尔积组成连接操作;
(5)执行连接运算前对关系做预处理(文件排序、建立临时索引等);
(6)找出公共子表达式;
3.关系操作次序交换的等价性
设E1和E2是两个关系操作表达式,若E1和E2表示相同的映射(E1和E2的同名变量带入相同关系后产生相同的结果),则E1和E2是等价的,记为E1≡E2;
4.若干定理
5.逻辑层优化算法
6.练习题
7.数据库的统计信息
8.代价估算
给定一个表达式,估计E的元组数目T(E)和 属性A上不同值V(E,A);
(1)投影估算
(2)简单选择估算
(3)复杂选择估算
(4)连接估计
(5)估计小结
9.练习题2
10.练习题3