从客户端发起一条SQL到结果返回给客户端整体的执行流程如图8-1所示,其中可以看到执行器所处的位置。
图8-1 客户端SQL执行流程示意图
如果把数据库看成一个组织,优化器位于组织最上面,是这个组织的首脑,是发号施令的指令下达机构,执行器位于组织的中间,听从优化器的指令,严格执行优化器给与的计划,将从存储空间中读取的数据进行加工处理最终返回给客户端。
第二章数据库设计中提到了SQL、关系代数之间的联系和转换,同时提到了关系操作符。关系的本质上是元组(表中的每行,即数据库中每条记录)的集合,关系代数实际上是定义为集合上的一系列操作。
执行器接收到的指令就是优化器应对SQL查询而翻译出来的关系代数运算符所组成的执行树。一颗形象化的执行树如图8-2所示:
图8-2 执行树示意图
其中每一个方块代表一个具体关系运算代数符,我们称之为算子,同时注意到这里有两个箭头代表的流。其中蓝色的流代表数据流,可以看到数据从叶节点流到根节点;红色的流代表控制流,从根节点向下驱动。这里的驱动是指上层节点调用下层节点函数的数据传送函数,从下层节点要数据。
执行器的整体目标就是在每一个由优化器构建出来的执行树上,通过控制流驱动数据流在执行树上高效的流动,其流动的速度决定了执行器的处理效率。