数据库系统概念 第十三章 查询优化
查询优化是从许多策略中找出最有效的查询执行计划的一种处理过程
概述
给定一个关系代数表达式,查询优化器的任务是产生一个查询执行计划,该计划能获得与原关系表达式相同的结果,
并且得到结果集的执行代价最小(或至少是不比最小执行代价大多少)
查询优化器需要产生一些能和给定表达式得到相同结果的候选计划,并选择代价最小的一个:产生有三步:
1 产生逻辑上与给定表达式等价的表达式
2 对所产生的表达式以不同方式作注释,产生不同的查询计划
3 估计每个执行计划的代价,选择估计代价最小的一个
执行计划产生后,其代价通过关系的统计信息(关系的大小和索引的深度)来估计
关系表达式的转换
如果两个关系表达式在每一个有效数据库实例中都会产生相同的元组集,则我们称它们是等价的
等价规则:
转换的例子:
连接的次序:
好的连接运算次序对于减少临时结果的大小是很重要的
表达式结果集统计大小的估计
一个操作的代价依赖于它的输入的大小和其他统计信息。
目录信息:
数据库系统目录存储了有关数据库关系的下列统计信息:
1 表的行数
2 表的数据占用的磁盘块数
3 表中每行的字节数
4 一个磁盘块能容纳表中的行数
5 表中列出现的非重复值的个数
执行计划选择:
基于代价的优化器从给定查询等价的所有查询执行计划空间中进行搜索,并选择估计代价最小的一个
基于代价的连接顺序选择:
利用动态规划算法来寻找最佳连接顺序。
采用等价规则的基于代价的优化器:
启发式优化:
基于代价优化的一个缺点是优化本身的代价,
虽然查询优化的代价可以通过巧妙的算法来减少,但一个查询的不同执行计划数仍可能很大
在这个集合里找到最优计划仍需要很多计算代价
下面是一个启发式规则的例子,此规则用于对关系代数查询进行转换:
1 尽早执行选择运算:
一个启发式优化器不验证采用本规则转换后代价是否减少,而是直接加以使用
2 尽早执行投影运算

浙公网安备 33010602011771号