首页 理论教育数据库查询规则-数据库技术与应用教程

数据库查询规则-数据库技术与应用教程

【摘要】:下面介绍的优化策略能提高查询的效率,但它们不一定是最优的策略,实际上“优化”一词并不是很确切,用“改进”或“改善”或许更恰当些。即使这样,使用预处理方法执行连接的时间一般仍大大减少。当查询视图时,定义视图的表达式就是公共子表达式的情况。

下面介绍的优化策略能提高查询的效率,但它们不一定是最优的策略,实际上“优化”一词并不是很确切,用“改进”或“改善”或许更恰当些。

1.选择运算尽可能先做

在优化策略中,这是最重要、最基本的一条。因为选择运算一般使计算结果大大变小,常常使执行时间降低几个数量级

2.在执行连接前对关系进行适当的预处理

预处理方法主要有两种,在连接属性上建立索引和对关系进行排序,然后执行连接。前者称为索引连接方法;后者称为排序合并连接方法。

假如要对学生表和选课表进行自然连接,用索引连接方法的步骤如下。

(1)对选课表的学号建立索引。

(2)对学生表中每一个元组,由学号值通过选课表的索引查找相应的选课元组。

(3)把这些选课元组和学生元组连接起来。

这样学生表和选课表均只需扫描一遍。处理时间是两个关系大小的线形函数。

用排序合并连接方法的步骤如下。

(1)首先对学生表和选课表按连接学号排序。

(2)取学生表中的第一个学号,依次扫描选课中具有相同学号的元组,把他们连接起来。(www.chuimin.cn)

(3)当扫描到学号不相同的第1个选课元组时,返回学生表扫描下一个元组,再扫描选课表中具有相同学号的元组,把它们连接起来。

重复上述步骤直到学生表扫描完。

这样学生表和选课表也只要扫描一遍。当然,执行时间要加上对两个表的排序时间。即使这样,使用预处理方法执行连接的时间一般仍大大减少。

3.把投影运算和选择运算同时进行

如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。

4.把投影同其前或其后的双目运算结合起来

没有必要为了去掉某些字段而重复扫描一遍关系。

5.把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算

连接特别是等值连接运算要比同样的笛卡儿积节省很多的时间。

6.找出公共子表达式

如果这种重复出现的子表达式的结果不是很大的关系,并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算的。当查询视图时,定义视图的表达式就是公共子表达式的情况。