1、语法:WITHsubquery_nameAS(the aggregation SQL statement)SELECT(query naming subquery_name);
2、创建测试表tbl1、tbl2,往tbl1里插入2条数据,往tbl2里插入1000000条数据
3、此时我们单看一下全表扫描tbl2时的情况。通过下图,我们看到单对tbl2全表扫描时的逻辑读为6911
4、下面我们构造一个相关子查询,看看这个查询的执行计划。通过下图我们看到tbl2表被访问了2次,同时逻辑读也达到了2w+
5、下面我们用with table as 的语法重新构造该查询。通过下图可以看到tbl2只被读取了一次,但是比较之前的SQL多了600+的db block gets和physical reads,这两部分的逻辑读和物理读是构造临时表时产生的,而后面对临时表访问了两次,逻辑读是9000+,较之前的SQL 2w+多的逻辑读,还是稍好一些。