��1、问题的提出
��一个查询用SQL语句可以有多种表达方式,而每个SQL语句又可以翻译成多个等价的关系代数表达式。例如:
select balance from account
where balance < 2500
可以翻译成下面两个关系代数表达式:
而每个表达式中的关系运算又可以用不同的算法和索引去实现。因此,查询优化器的任务就是要找出上述表达式中代价最小的计算给定查询的处理过程(processing)。
��2、执行计划
��如图9-1-3所示,查询优化器以关系代数表达式作为输入,输出的是一个查询执行计划。那么,什么是查询执行计划呢?
|
图9-1-3:查询优化器
|
��要计算一个查询,不仅要提供关系代数表达式,还要对该表达式加上注释。这些注释用于说明如何具体实施每个操作。例如,可以说明某个关系运算所采用的算法或将要使用的一个或多个特定的索引。这些加上了有关"如何执行"的注释的关系代数运算称为执行原语,而用于计算一个查询的原语序列称为查询执行计划或查询计算计划。
��所谓的查询优化就是为给定查询选择最有效的查询执行计划的过程,如图9-1-4所示,这涉及到两个方面的内容:
��⑴�一方面是在关系代数级进行优化,要做的是力图找出与给定关系代数表达式等价、但执行效率更高的一个表达式;
��⑵�另一方面涉及到查询语句处理的详细策略的选择。例如,确定执行运算所采用的具体算法和要使用的特定索引等等。
|
图9-1-4:查询执行计划示意

|
|
��3、查询优化器
��为了能够在诸多查询执行计划中作出选择,优化器必须估计每个查询执行计划的代价。这要用到有关关系的统计信息,如图9-1-5所示。至于如何估计查询执行计划的代价,这是本章的主要内容,下面将会有详细的介绍。
|
图9-1-5:查询优化器与统计数据
|