当我们使用with的时候,oracle可能会把with里面的结果转换为暂时表。这是仅仅是可能,由于CBO会推断。

inline是不转换成暂时表。materialize是强制转换成暂时表。

制造数据

drop table test1 purge;

drop table test2 purge;

drop table test3 purge;

create table test1 as  select * from dba_objects;

create table test2 as  select * from user_objects;

create table test3 as  select * from dba_objects;

exec dbms_stats.gather_table_stats(user,'test1');

exec dbms_stats.gather_table_stats(user,'test2');

exec dbms_stats.gather_table_stats(user,'test3');

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> set autotrace traceonly

SQL> with t as(select t1.* from test1 t1,test2 t2

       where t1.object_id=t2.object_id)

    select * from t,test3 t3 where t.object_id=t3.object_id;

已选择1931行。

已用时间:  00: 00: 00.20

运行计划

----------------------------------------------------------

Plan hash value: 1215971386

-----------------------------------------------------------------------------

| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |       |  1931 |   382K|   409   (2)| 00:00:06 |

|*  1 |  HASH JOIN          |       |  1931 |   382K|   409   (2)| 00:00:06 |

|*  2 |   HASH JOIN         |       |  1932 |   196K|   210   (2)| 00:00:03 |

|   3 |    TABLE ACCESS FULL| TEST2 |  1934 |  9670 |    10   (0)| 00:00:01 |

|   4 |    TABLE ACCESS FULL| TEST1 | 71347 |  6897K|   199   (2)| 00:00:03 |

|   5 |   TABLE ACCESS FULL | TEST3 | 71349 |  6897K|   199   (2)| 00:00:03 |

-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   1 - access("T1"."OBJECT_ID"="T3"."OBJECT_ID")

   2 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

       1173  consistent gets

          0  physical reads

          0  redo size

     139087  bytes sent via SQL*Net to client

       1768  bytes received via SQL*Net from client

        130  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

       1931  rows processed

使用hint inline

SQL> with t as(select /*+inline*/t1.* from test1 t1,test2 t2

       where t1.object_id=t2.object_id)

    select * from t,test3 t3 where t.object_id=t3.object_id;

已选择1931行。

已用时间:  00: 00: 00.21

运行计划

----------------------------------------------------------

Plan hash value: 1215971386

-----------------------------------------------------------------------------

| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |       |  1931 |   382K|   409   (2)| 00:00:06 |

|*  1 |  HASH JOIN          |       |  1931 |   382K|   409   (2)| 00:00:06 |

|*  2 |   HASH JOIN         |       |  1932 |   196K|   210   (2)| 00:00:03 |

|   3 |    TABLE ACCESS FULL| TEST2 |  1934 |  9670 |    10   (0)| 00:00:01 |

|   4 |    TABLE ACCESS FULL| TEST1 | 71347 |  6897K|   199   (2)| 00:00:03 |

|   5 |   TABLE ACCESS FULL | TEST3 | 71349 |  6897K|   199   (2)| 00:00:03 |

-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   1 - access("T1"."OBJECT_ID"="T3"."OBJECT_ID")

   2 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")

统计信息

----------------------------------------------------------

          1  recursive calls

          0  db block gets

       1173  consistent gets

          0  physical reads

          0  redo size

     139087  bytes sent via SQL*Net to client

       1768  bytes received via SQL*Net from client

        130  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

       1931  rows processed

使用hint materialize

SQL> with t as(select /*+materialize*/t1.* from test1 t1,test2 t2

       where t1.object_id=t2.object_id)

    select * from t,test3 t3 where t.object_id=t3.object_id;

已选择1931行。

已用时间:  00: 00: 00.21

运行计划

----------------------------------------------------------

Plan hash value: 1492452360

----------------------------------------------------------------------------------------------------------

| Id  | Operation                  | Name                        | Rows  | Bytes | Cost (%CPU)| Time  |

----------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT           |                             |  1925 |   575K|   416   (2)| 00:00:06 |

|   1 |  TEMP TABLE TRANSFORMATION |                             |       |       |            |       |

|   2 |   LOAD AS SELECT           | SYS_TEMP_0FD9D660C_9A3A2AEA |       |       |            |       |

|*  3 |    HASH JOIN               |                             |  1932 |   196K|   210   (2)| 00:00:03 |

|   4 |     TABLE ACCESS FULL      | TEST2                       |  1934 |  9670 |    10   (0)| 00:00:01 |

|   5 |     TABLE ACCESS FULL      | TEST1                       | 71347 |  6897K|   199   (2)| 00:00:03 |

|*  6 |   HASH JOIN                |                             |  1925 |   575K|   207   (2)| 00:00:03 |

|   7 |    VIEW                    |                             |  1932 |   390K|     7   (0)| 00:00:01 |

|   8 |     TABLE ACCESS FULL      | SYS_TEMP_0FD9D660C_9A3A2AEA |  1932 |   196K|     7   (0)| 00:00:01 |

|   9 |    TABLE ACCESS FULL       | TEST3                       | 71349 |  6897K|   199   (2)| 00:00:03 |

----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")

   6 - access("T"."OBJECT_ID"="T3"."OBJECT_ID")

统计信息

----------------------------------------------------------

        394  recursive calls

         25  db block gets

       1243  consistent gets

         18  physical reads

        600  redo size

     139087  bytes sent via SQL*Net to client

       1768  bytes received via SQL*Net from client

        130  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

       1931  rows processed

oracle hint inline materialize的更多相关文章

  1. SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表)

    SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表) swap_join_inputs是针对哈希连接的hint,它的含义 ...

  2. SQL优化过程中常见Oracle HINT

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  3. Oracle hint手动优化

    例子 select/*+FULL(fortest)*/ * from fortest where id = 2000000 //使用0.70s时间 select* from fortest where ...

  4. 品味性能之道<十>:Oracle Hint

    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. 因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Ora ...

  5. Oracle Hint 用法

    正确的语法是: select /*+ index(x idx_t) */ * from t x where x.object_id=123 /*+    */ 和注释很像,比注释多了一个“+”,这就是 ...

  6. Oracle Hint 详解

    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. 因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Ora ...

  7. Oracle hint之ORDERED和USE_NL

    Hint:ORDERED和USE_NL ORDERED好理解,就是表示根据 from 后面表的顺序join,从左到右,左边的表做驱动表 use_nl(t1,t2):表示对表t1.t2关联时采用嵌套循环 ...

  8. oracle --hint总结

    得到一条sql语句执行计划的常用方法:1.explain plan 命令  2.DBMS_XPLAN包3.sqlplus中的AUTOTRACE开关4.10046事件5.10053事件6.AWR报告或者 ...

  9. Oracle Hint用法整理笔记

    目录 1./+ result_cache / 2./+ connect_by_filtering / 3./+ no_unnset / 4./+ index(表别名 索引名) / 5./+ INDEX ...

随机推荐

  1. 怎么修改Elasticsearch的对外ip 默认是本地IP 127.0.0.1

    //修改C:\Program Files\elasticsearch-2.1.1\config\elasticsearch.yml: network.bind_host: 172.16.1.86 pa ...

  2. Spring Cloud构建微服务架构(三)断路器

    在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因 ...

  3. Qt中使用DOM解析XML文件或者字符串(实例)

    因为需要读取配置文件,我的配置文件采用xml:因此编写了使用qt读取xml文件内容的代码,xml文件如下: <?xml version="1.0" encoding=&quo ...

  4. 基于FPGA的异步FIFO验证

    现在开始对上一篇博文介绍的异步FIFO进行功能验证,上一篇博文地址:http://blog.chinaaet.com/crazybird/p/5100000872 .对异步FIFO验证的平台如图1所示 ...

  5. ISE约束文件*.ucf的写法

    之前一直相不明白,为什么从官网下载的AC97的IP不能跑起来,整个IP就像空壳一样,bit_clk输进去,没有任何信号输出来.从IP的RTL来看,即使是IP不连到CPU的BUS上,只要是综合进FPGA ...

  6. sql排它锁

    1.为什么需要排它锁 事务中,有时我们在操作一条数据时,是不能让其他事务同时去操作的. 如某商品库存数量为1,如果有多个事务对该库存进行减一操作,那么库存可能出现负数. 所以,在某个事务操作时,需要把 ...

  7. ThinkPHP框架快捷键使用说明

    ThinkPHP框架快捷键使用说明 php mvc框架ThinkPHP中有很多快捷键,但是很多时候我们不太明白它的意思,下面我简单的列了下他们的含义: A快速实例化Action类库 B执行行为类 C配 ...

  8. php爬虫实践

    之前用nodejs的cheerio来做,不过nodejs的异步回掉太恶心了,受不了. 后来发现了php的htmlpagedom库,类似jquery的选择器语法,而且支持中文. 安装  composer ...

  9. 未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"

    答案一: 因为没有安装64位的Jet40驱动.可以到http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=c06b8369-60 ...

  10. 【C#】访问泛型中的List列表数据

    光看标题的确不好说明问题,下面描述一下问题场景: 已知后端自定义的返回的Json数据结构如下: response: { "message": "返回成功", & ...