Oracle with as (hint inline materialize)

  1. 测试数据:
SQL> create table test1 as  select * from dba_objects;
Table created.
SQL> create table test2 as  select * from user_objects;
Table created.
SQL> create table test3 as  select * from dba_objects;
Table created.

收集统计信息:

BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(ownname          => ‘SCOTT‘,
                                tabname          => ‘TEST1‘,
                                estimate_percent => 100,
                                method_opt       => ‘for  columns owner size repeat‘,
                                no_invalidate    => FALSE,
                                degree           => 4,
                                granularity      => ‘ALL‘,
                                cascade          => TRUE);
  END;
   /
PL/SQL procedure successfully completed.

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;

11 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2878150729

-------------------------------------------------------------------------------------
| Id  | Operation	    | Name  | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |	    | 86999 |	 16M|	    |  1605   (1)| 00:00:20 |
|*  1 |  HASH JOIN	    |	    | 86999 |	 16M|	    |  1605   (1)| 00:00:20 |
|   2 |   TABLE ACCESS FULL | TEST2 |	 13 |	 65 |	    |	  3   (0)| 00:00:01 |
|*  3 |   HASH JOIN	    |	    | 86999 |	 16M|  9352K|  1602   (1)| 00:00:20 |
|   4 |    TABLE ACCESS FULL| TEST1 | 86997 |  8325K|	    |	347   (1)| 00:00:05 |
|   5 |    TABLE ACCESS FULL| TEST3 | 86999 |  8326K|	    |	347   (1)| 00:00:05 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

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

Statistics
----------------------------------------------------------
	  0  recursive calls
	  0  db block gets
       2491  consistent gets
       2484  physical reads
	  0  redo size
       3736  bytes sent via SQL*Net to client
	523  bytes received via SQL*Net from client
	  2  SQL*Net roundtrips to/from client
	  0  sorts (memory)
	  0  sorts (disk)
	 11  rows processed
	 

加 materialize hint,强制oracle生成临时表
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;

11 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 3288461629

----------------------------------------------------------------------------------------------------------------
| Id  | Operation		   | Name		       | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	   |			       |   582M|   165G|       |  3963	(40)| 00:00:48 |
|   1 |  TEMP TABLE TRANSFORMATION |			       |       |       |       |	    |	       |
|   2 |   LOAD AS SELECT	   | SYS_TEMP_0FD9D661A_155646 |       |       |       |	    |	       |
|*  3 |    HASH JOIN		   |			       | 86997 |  8750K|       |   351	 (1)| 00:00:05 |
|   4 |     TABLE ACCESS FULL	   | TEST2		       |    13 |    65 |       |     3	 (0)| 00:00:01 |
|   5 |     TABLE ACCESS FULL	   | TEST1		       | 86997 |  8325K|       |   347	 (1)| 00:00:05 |
|*  6 |   HASH JOIN		   |			       |   582M|   165G|  9352K|  3613	(44)| 00:00:44 |
|   7 |    TABLE ACCESS FULL	   | TEST3		       | 86999 |  8326K|       |   347	 (1)| 00:00:05 |
|   8 |    VIEW 		   |			       | 86997 |    17M|       |   332	 (1)| 00:00:04 |
|   9 |     TABLE ACCESS FULL	   | SYS_TEMP_0FD9D661A_155646 | 86997 |  8750K|       |   332	 (1)| 00:00:04 |
----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
   6 - access("T"."OBJECT_ID"="T3"."OBJECT_ID")

Statistics
----------------------------------------------------------
	 55  recursive calls
	  8  db block gets
       2525  consistent gets
       2485  physical reads
	656  redo size
       3736  bytes sent via SQL*Net to client
	523  bytes received via SQL*Net from client
	  2  SQL*Net roundtrips to/from client
	  3  sorts (memory)
	  0  sorts (disk)
	 11  rows processed
时间: 2024-10-13 08:50:42

Oracle with as (hint inline materialize)的相关文章

Oracle实例内存(SGA和PGA)调整

一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区).  共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息. (3)缓冲

oracle hint inline materialize

当我们使用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

oracle 导入导出(imp,exp)dump数据文件

需要注意的是,不同版本的oracle的导入导出应符合下面的规则: 不管是从低版本导到高版本,还是高版本导入低版本.导出时需要在原本的版本上导出dump文件,再在需要导入的版本上进行导入(有一些绕). 1.进入windows的doc窗口(cmd) 2.导出dump文件 exp username/[email protected]服务名 file=文件路径及文件名 //这里的服务名指的是net manage里的连接名 3.导入dump文件 imp username/[email protected]

oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)

匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必须) 匿名块(以DECLARE或BEGIN开始)每次使用时都要进行编译. 匿名块不存储在数据库中,并且它不能从其它的PL/SQL块中进行调用. 过程.函数.包和触发器:都是带名块.(请注重同匿名块的比较) 过程.函数.包和触发器:可以存储在数据库中,并且可以在需要的时候运行. 过程.函数.包和触发器

ORACLE循序渐进讲解(第四讲)

一.数据库管理员 1.sys与system的区别(用实例说明) 在第一讲说过下面两句话: (1)sys用户是超级用户,具有最高权限,具有dba的角色和sysdba.sysoper数据库管理特殊权限,所有 oracle 的数据字典的基表和视图都存放在sys 用户中,这些基表和视图对于 oracle 的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改,sys有创建create  database的权限. (2)system用户是管理操作员,权限一样很大具有dba角色,没有创建create

Oracle数据库12cR2(项目实战之一):在Windows上安装Oracle12.2

oracle数据库12cR2(项目实战之二):linux系统安装Oracle12.2 一.课程主题: 风哥Oracle数据库教程12cR2(项目实战之二):在linux操作系统安装Oracle12.2. 二.项目需求: 某单位新版HR人力资源系统最近上线,需要在Linux系统上安装一套Oracle12cR2数据库,并创建数据库,提供给业务系统使用. 三.实施步骤: 2.1.Oracle数据库12cR2 for Linux项目介绍与调研 2.2.Oracle数据库12cR2 for Linux实施

oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 数据库备份与恢复是数据库管理员必须掌握的.没有任何系统能免遭硬盘物理损坏.粗心用户的错误操作.或一些可能会威胁到存储数据的潜在灾难的侵袭.为了能够最大限度地恢复数据库数据,保证数据库的安全运行,应该选择最合理的备份方法来防止各种故障所导致的用户数据丢失,本次主要介绍三种备份恢复技术,即RMAN技术.数据泵技术及闪回技术. 一.备份与恢复概

51CTO-风哥-ORACLE学习计划(持续更新中)

第一模块(2018年11月10号-2018年12月8号) 学前指导(3节课)Linux(41节课)泛Unix操作系统(4节课)Oracle(97节课)(第5章1天.第6章1天.第7章1天.第8章2天.第9章2天.第10章2天.第11章3天.第12章3天.第13章2天)-->总共17天 学习时间 每天晚上20点到晚上23点学习方法 视频学习,笔记整理,加博客输出 2018年12月1号-2018年12月20号完成 第二模块(2018年12月10号-2019年1月7号) 原文地址:http://blo

oracle 12c 安装指南(各种问题总结)

下一学期要学习数据库的知识,趁着敲代码之余,安装著名的oracle来放松一下 1.首先从官网下载安装包http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html这里我提供的是官网的下载地址,直接打开后选择对应的操作系统即可下载.(右上角有切换中文选项可以更清楚的了解版本信息) 2.下载完成后,解压,然后点击安装即可(因为我安装的是12c,我会介绍这个版本安装会出现的问题与解决方案).   ,