当我们使用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. mysql update常见实例

    在MySQL中使用update语句的时候,Where条件或者值都可以使用子查询,比如: ) ); 但是如果子查询和更新的表是同一个表的话,MySQL会报如下的错误:中涉及到的子查询要格外注意 Erro ...

  2. Spring在xml配置里配置事务

    事先准备:配置数据源对象用<bean>实例化各个业务对象. 1.配置事务管理器. <bean id="transactionManager" class=&quo ...

  3. jdbc连接hive0.14

    Jdbc连接hive0.14版本号 眼下官网最新版本号是hive0.13,要想下载最新的hive得去git上去clone一个. Hive0.14最大特点是支持直接插入. 如今做一个jdbc连接hive ...

  4. Disable Oracle Automatic Jobs

    By default, Oracle will run some maintance jobs every night. If you don't want to run those jobs, yo ...

  5. 怎样用modelsim做后仿真

    摘要: 怎样用modelsim做后仿(编译工具采用quatus) step1:在qurtus改变编译选项:     assignments->EDA tool setting:选择verilog ...

  6. 【Android】3.23 示例23--瓦片图功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 地图SDK自v3.6.0起,新增瓦片图层(tileOverlay), 该图层支持开发者添加自有瓦片数 ...

  7. CentOS 64位下安装Postfix+Dovecot 配置邮件server笔记

    Postfix 和Dovecot功能确实非常强大,支持各种认证方式, 配置非常灵活, 就由于太过于灵活, 反而安装配置的过程中,easy有各种各样的陷阱,碰到问题了. 日志是最好的解决的方法了.    ...

  8. redis make test 报错

    [root@ok redis-]# make test cd src && make test make[]: Entering directory `/usr/local/src/r ...

  9. linux命令(26):Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 根据pid,kill该进程:http://www.cnblogs.com/lovychen/p/54113 ...

  10. 针对Properties中实时性要求不高的配置参数,用Java缓存起来

    Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求 ...