a. 从树形结构图可以看出,操作1(嵌套循环操作)有2个孩子。其中,操作2的序号较小,所以先执行(开始外循环)
b. 操作2扫描表emp,根据emp.comm is null 过滤,返回10条数据给父操作(操作1)
c. 对于操作2返回的10条记录,对每一条记录执行一遍操作3,(内循环)
d. 内循环由操作3和操作4组成,对于操作2返回的每一条记录先执行操作4,通过访问型谓词emp.deptno = dept.deptno扫描所有dept_pk,返回一个rowid给操作3
e. 操作3通过操作4返回的一个rowid,访问dept表,一条记录被读取,然后根据过滤型谓词dept.dname <>'sales'过滤。判断这一条记录是否符合要求。
f. 最终对操作2返回的10条记录,每一条执行一次内循环,过滤了2条,剩余8条返回给了操作1.
a. 三孩子中操作2先执行(ID号最小)操作2扫描emp表,返回14条记录给操作1.
b. 对于操作2返回的每一条记录都需要执行操作3和操作5,由于缓存的原因我们可以看到,操作3只执行了3次,操作5执行了8次,都小于14次。
c. 对于操作5这个过滤限制条件,影响不到到操作2返回的14条记录,因为它的rows列为0.
d. 对于操作3这个限制条件,有一条记录匹配到了操作2中的6条记录。因为操作3的rows列为1,总共有一条记录不符合条件,但是,操作1最终只接收到了8条数据,所以操作3匹配上的那一条数据过滤掉了操作2的6条数据。
e. 所以通过操作3,和操作5的把关,过滤掉了操作2的6条数据,最终返回给了操作1 8条数据。
3. 更新(update)操作
例子如下:
对应树形图
我们可以看到更新操作有3个孩子,孩子2驱动孩子3和孩子5执行
a. 操作2执行全表扫描,得到14条记录返回给操作1,
b. 操作2每返回一条记录都要驱动操作3和操作5执行一次
c. 操作3要执行的话,先执行操作4.最后操作3总共只返回3个值给操作1,说明操作2中返回的14条记录中的deptno只有3个唯一的值,其他都是重复值。
d. 操作5执行的时候,先执行操作6,但是操作5和6只执行一次,因为跟操作2返回的记录没有关系,尽管操作2要求操作5执行14次,但是每一次执行的结果都一样,所以只执行了一次。
e. 操作1接收到操作3,操作5的返回值,更新操作2返回的14条记录。