WITH AS 测试

来源:互联网 发布:java集合类迭代器 编辑:程序博客网 时间:2024/04/30 07:22


WITH AS 子句定义SQL语句级的临时表、该临时表仅对本次执行的SQL有效。

SQL> select count(*) from t3 where table_name='test' and tablespace_name='tbs1';  COUNT(*)----------    299999SQL> select count(*) from t3 where table_name='test' and tablespace_name='tbs2';  COUNT(*)----------    300000SQL> select count(*) from t3 where table_name='test' and tablespace_name='tbs3';  COUNT(*)----------    400000SQL> select count(*) from t3 ;  COUNT(*)----------   3233792SQL> with tmp as  2  (select blocks,num_rows,tablespace_name from t3 where table_name='test')  3  select blocks,num_rows from tmp  where tablespace_name='tbs3'  4  union all  5  select blocks,num_rows from tmp  where tablespace_name='tbs2'  6  union all  7  select blocks,num_rows from tmp where tablespace_name='tbs1';已选择999999行。已用时间:  00: 00: 24.51执行计划----------------------------------------------------------Plan hash value: 2052080865-------------------------------------------------------------------------------------------------------| Id  | Operation                  | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |-------------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT           |                          |     3 |   129 |     6  (67)| 00:00:01 ||   1 |  TEMP TABLE TRANSFORMATION |                          |       |       |            |          ||   2 |   LOAD AS SELECT           |                          |       |       |            |          ||*  3 |    TABLE ACCESS FULL       | T3                       |     1 |    32 |    43   (0)| 00:00:01 ||   4 |   UNION-ALL                |                          |       |       |            |          ||*  5 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||   6 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6604_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 ||*  7 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||   8 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6604_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 ||*  9 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||  10 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6604_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 |-------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   3 - filter("TABLE_NAME"='test')   5 - filter("TABLESPACE_NAME"='tbs3')   7 - filter("TABLESPACE_NAME"='tbs2')   9 - filter("TABLESPACE_NAME"='tbs1')统计信息----------------------------------------------------------        912  recursive calls       4405  db block gets     172745  consistent gets      86161  physical reads       1476  redo size   15545728  bytes sent via SQL*Net to client     733711  bytes received via SQL*Net from client      66668  SQL*Net roundtrips to/from client         23  sorts (memory)          0  sorts (disk)     999999  rows processedSQL> select blocks,num_rows from t3 where table_name='test' and tablespace_name='tbs3'  2  union all  3  select blocks,num_rows from t3 where table_name='test' and tablespace_name='tbs2'  4  union all  5  select blocks,num_rows from t3 where table_name='test' and tablespace_name='tbs1';已选择999999行。已用时间:  00: 00: 42.96执行计划----------------------------------------------------------Plan hash value: 2294035736---------------------------------------------------------------------------| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |---------------------------------------------------------------------------|   0 | SELECT STATEMENT   |      |     3 |    96 |   130  (67)| 00:00:02 ||   1 |  UNION-ALL         |      |       |       |            |          ||*  2 |   TABLE ACCESS FULL| T3   |     1 |    32 |    43   (0)| 00:00:01 ||*  3 |   TABLE ACCESS FULL| T3   |     1 |    32 |    43   (0)| 00:00:01 ||*  4 |   TABLE ACCESS FULL| T3   |     1 |    32 |    43   (0)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   2 - filter("TABLESPACE_NAME"='tbs3' AND "TABLE_NAME"='test')   3 - filter("TABLESPACE_NAME"='tbs2' AND "TABLE_NAME"='test')   4 - filter("TABLESPACE_NAME"='tbs1' AND "TABLE_NAME"='test')统计信息----------------------------------------------------------          1  recursive calls          0  db block gets     343125  consistent gets     245980  physical reads          0  redo size   15545728  bytes sent via SQL*Net to client     733711  bytes received via SQL*Net from client      66668  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)     999999  rows processedSQL> with tmp as  2  (select /*+ materialize */  blocks,num_rows,tablespace_name from t3 where table_name='test')  3  select blocks,num_rows from tmp  where tablespace_name='tbs3'  4  union all  5  select blocks,num_rows from tmp  where tablespace_name='tbs2'  6  union all  7  select blocks,num_rows from tmp where tablespace_name='tbs1';已选择999999行。已用时间:  00: 00: 24.60执行计划----------------------------------------------------------Plan hash value: 94255643-------------------------------------------------------------------------------------------------------| Id  | Operation                  | Name                     | Rows  | Bytes | Cost (%CPU)| Time     |-------------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT           |                          |     3 |   129 |     6  (67)| 00:00:01 ||   1 |  TEMP TABLE TRANSFORMATION |                          |       |       |            |          ||   2 |   LOAD AS SELECT           |                          |       |       |            |          ||*  3 |    TABLE ACCESS FULL       | T3                       |     1 |    32 |    43   (0)| 00:00:01 ||   4 |   UNION-ALL                |                          |       |       |            |          ||*  5 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||   6 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6606_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 ||*  7 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||   8 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6606_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 ||*  9 |    VIEW                    |                          |     1 |    43 |     2   (0)| 00:00:01 ||  10 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D6606_CF1A0 |     1 |    13 |     2   (0)| 00:00:01 |-------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   3 - filter("TABLE_NAME"='test')   5 - filter("TABLESPACE_NAME"='tbs3')   7 - filter("TABLESPACE_NAME"='tbs2')   9 - filter("TABLESPACE_NAME"='tbs1')统计信息----------------------------------------------------------        153  recursive calls       4405  db block gets     172346  consistent gets      86157  physical reads       1532  redo size   15545728  bytes sent via SQL*Net to client     733711  bytes received via SQL*Net from client      66668  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)     999999  rows processed--SYS_TEMP_0FD9D6606_CF1A0为系统产生的临时表。--一般写法SQL> select blocks,num_rows from t3 where table_name='test'  2  and (tablespace_name='tbs3' or tablespace_name='tbs2' or tablespace_name='tbs1');已选择999999行。已用时间:  00: 00: 22.94执行计划----------------------------------------------------------Plan hash value: 4161002650--------------------------------------------------------------------------| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------|   0 | SELECT STATEMENT  |      |     1 |    32 |    43   (0)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| T3   |     1 |    32 |    43   (0)| 00:00:01 |--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("TABLE_NAME"='test' AND ("TABLESPACE_NAME"='tbs1' OR              "TABLESPACE_NAME"='tbs2' OR "TABLESPACE_NAME"='tbs3'))统计信息----------------------------------------------------------          1  recursive calls          0  db block gets     157529  consistent gets      81835  physical reads          0  redo size   14157443  bytes sent via SQL*Net to client     733711  bytes received via SQL*Net from client      66668  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)     999999  rows processed

某些时候,with as 的性能要比union all好些,物理读和逻辑读更少。一般写法因为对表只扫描一次,物理读和逻辑读最少。在一些情况下根据业务使用with as 改写union all,也许可能提升性能。



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一岁八个月宝宝斜颈怎么办 四个月宝宝有点斜颈怎么办 一岁宝宝有点偏怎么办 6个月宝宝有点斜颈怎么办 四个月宝宝左侧胸锁乳突肌厚怎么办 脖子疼好几天了怎么办 有双下巴怎么办才能瘦掉 胃突然疼的厉害怎么办 手劳损痛的厉害怎么办 手臂扭到了很疼怎么办 寒湿导致肩膀痛怎么办 吃辣脖子肿了怎么办 脖子长了个肿瘤怎么办 一边背高一边低怎么办 生完孩子肩宽了怎么办 狗狗脖子上长囊肿怎么办 胸肋关节韧带疼怎么办 三岁宝宝有点驼背怎么办 20多岁有点驼背怎么办 五岁宝宝有点驼背怎么办 孕妇腰扭了很痛怎么办 怀孕了腰扭了疼怎么办 小龙芭比扭腰机开机没有声音怎么办 高中生训练数学计算的准确性怎么办 跑步累了跑不动了怎么办 一跑步就岔气了怎么办 婴儿关节折邹发红怎么办? 打了借条人跑了怎么办 吃凉的胃不舒服怎么办 跑步机带子跑偏怎么办 在跑步机上摔倒怎么办 弯道以后就是直线行驶怎么办 跑步机的声音大怎么办 科二一直考不过怎么办 考科目三太紧张怎么办 科目三太紧张了怎么办 跑步慢怎么办怎样跑快 铣床铣得不直怎么办 考试的时候检测仪响怎么办 吸入腐蚀性气体导致嗓子疼怎么办 孕妇已做c13检查怎么办