在存在in的子查询的SQL语句和存在EXISTS的相关子查询的SQL语句的执行计划里,有NESTED LOOPS SEMI (即半嵌套循环)。
所谓的NESTED LOOPS SEMI (即半嵌套循环),就是
the out query stops evaluating (评价,求…的数值)the result set of the inner query when the first value is found。
也就是说,一旦子查询的第一条结果出来,主查询(里的表的当前行)就停止子查询的继续进行执行。
NESTED LOOPS SEMI (即半嵌套循环)执行过程的伪代码如下:
- open tab1 (主查询里的表)
- while tab1 still has records
- fetch one record from tab1
- (并且) result = false (即将变量result的值置为alse)
- open tab2
- while tab2 still has records
- fetch one record from tab2
- if(根据tab1.record 和 tab2.record的值执行一次子查询语句所得的结果集不为空) then
- result = true </