第九章 关系查询处理和查询优化
9.1 关系数据库系统的查询处理
9.1.1 查询处理步骤
- 关系数据库管理系统查询处理阶段 :
1. 查询分析
2. 查询检查
3. 查询优化
4. 查询执行
9.1.2 实现查询操作的算法示例
- 选择操作的实现
选择操作典型实现方法:
(1) 全表扫描方法 (Table Scan)
对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出
(2)索引扫描方法 (Index Scan)
适合于选择条件中的属性上有索引(例如B+树索引或Hash索引)
通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组
2.连接操作的实现
(1)嵌套循环算法(nested loop join)
(2)排序-合并算法(sort-merge join 或merge join)
(3)索引连接(index join)算法
(4)Hash Join算法
9.2 关系数据库系统的查询优化
关系系统的查询优化是关系数据库管理系统实现的关键技术又是关系系统的优点所在,减轻了用户选择存取路径的负担
集中式数据库
执行开销主要包括:磁盘存取块数(I/O代价)
处理机时间(CPU代价)
查询的内存开销
I/O代价是最主要的
分布式数据库
总代价=I/O代价+CPU代价+内存代价+通信代价
查询优化的总目标
选择有效的策略
求得给定关系表达式的值
使得查询代价最小(实际上是较小)
9.3 代数优化
9.3.1 关系代数表达式等价变换规则
---代数优化策略:通过对关系代数表达式的等价变换来提高查询效率
---关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
---两个关系表达式E1和E2是等价的,可记为E1≡E2
常用的等价变换规则:
1.连接、笛卡尔积交换律
2.连接、笛卡尔积的结合律
3.投影的串接定律
4.选择的串接定律
5.选择与投影操作的交换律
6. 选择与笛卡尔积的交换律
7. 选择与并的分配律
8. 选择与差运算的分配律
9. 选择对自然连接的分配律
10. 投影与笛卡尔积的分配律
11. 投影与并的分配律
9.3.2 查询树的启发式优化
典型的启发式规则
(1)选择运算应尽可能先做
(2)把投影运算和选择运算同时进行
(3) 把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。
(4) 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间。
(5) 找出公共子表达式
如果这种重复出现的子表达式的结果不是很大的关系
并且从外存中读入这个关系比计算该子表达式的时间少得多
则先计算一次公共子表达式并把结果写入中间文件是合算的。
当查询的是视图时,定义视图的表达式就是公共子表达式的情况
9.4 物理优化
物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划
物理优化方法:基于规则的启发式优化
基于代价估算的优化
两者结合的优化方法
9.4.1 基于启发式规则的存取路径选择优化
1.选择操作的启发式规则
对于小关系,使用全表顺序扫描,即使选择列上有索引
对于大关系,启发式规则有:
(1)对于选择条件是“主码=值”的查询
查询结果最多是一个元组,可以选择主码索引
一般的关系数据库管理系统会自动建立主码索引
(2)对于选择条件是“非主属性=值”的查询,并且选择列上有索引,要估算查询结果的元组数目,如果比例较小(<10%)可以使用索引扫描方法,否则还是使用全表顺序扫描
(3)对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引,要估算查询结果的元组数目,如果比例较小(<10%)可以使用索引扫描方法,否则还是使用全表顺序扫描
- 对于用AND连接的合取选择条件
如果有涉及这些属性的组合索引:优先采用组合索引扫描方法
如果某些属性上有一般的索引,可以用索引扫描方法
其他情况:使用全表顺序扫描
(5)对于用OR连接的析取选择条件,一般使用全表顺序扫描
2.连接操作的启发式规则
(1)如果2个表都已经按照连接属性排序:选用排序-合并算法
(2)如果一个表在连接属性上有索引:选用索引连接算法
(3)如果上面2个规则都不适用,其中一个表较小:选用Hash join算法
(4)可以选用嵌套循环方法,并选择其中较小的表,确切地讲是占用的块数(b)较少的表,作为外表(外循环的表) 。