执行计划描述数据库引擎执行SQL语句时实时的操作。
CBO
连接类型或访问类型:如何访问表的数据
执行计划是一棵树,用来描述SQL引擎执行操作的顺序以及各个操作之间的关系。树中的每个节点是一个行源操作,例如:表扫描、联接或排序。在各操作节点之间,存在这父子关系:
1、一个父操作拥有一个或多个子操作;
2、一个子操作只有一个父操作;
3、唯一没有父操作的操作是树的根操作(顶层操作)。
4、子操作跟随着它们的父操作,在右侧缩进排列,同一个父操作下的所有子操作都拥有相同的缩进。
5、父操作在子操作之前出现(父操作的ID比子操作的ID要小)。
了解父子关系对于理解执行计划各个操作的顺序十分关键。为了完成它们的任务,父操作需要由它们的子操作提供的数据,因此,第一个被完全执行的操作是没有子操作的那个。
1、父操作调用子操作;
2、子操作在它们的父操作之前被完全执行;
3、子操作向它们的父操作传递数据。
操作的类型:
1、独立操作:最多拥有一个子操作的所有非迭代操作
前面说过,子操作在父操作之前被完整执行,这大体没错。但当智能优化被引进来时情况就有些不一样了。可能发生的情况是,父操作判断完全执行子操作没有意义甚至根本不需要执行它。常见的两种场景如下:
① COUNT STOPKEY操作:通常用于执行top-n查询,它的目标是一旦所需数据已经返回给了调用者就会停止处理。
②FILTER操作
2、迭代操作:最多拥有一个可以多次执行的子操作的操作。
3、无关联组合操作:拥有多个可以独立执行的子操作的所有操作。
子操作顺序执行,从拥有最小ID的操作开始直到拥有最大ID的操作,在开始处理随后的子操作之前,必须完全执行当前的子操作。
一个子操作至多执行一次并且独立于其他所有的子操作。
4、关联组合操作:拥有多个子操作且其中一个子操作控制所有其他子操作的执行的所有操作