在12CR2中出现一种新的查询转换技术临时表转换, 在下面的例子中,数据库对customers表上的子查询结果物化到一个临时表中:

SQL> show parameter star_transformation_enabled
star_transformation_enabled          string      FALSE
SQL> alter session set star_transformation_enabled='true';
Session altered.
SQL> SELECT c.cust_city,2  t.calendar_quarter_desc,3  SUM(s.amount_sold) sales_amount4  FROM sales s,5  times t,6  customers c,7  channels ch8  WHERE s.time_id = t.time_id9  AND s.cust_id = c.cust_id10  AND s.channel_id = ch.channel_id11  AND c.cust_state_province = 'CA'12  AND ch.channel_desc = 'Internet'13  AND t.calendar_quarter_desc IN ('1999-01','1999-02')14  GROUP BY c.cust_city, t.calendar_quarter_desc;
Montara                        1999-02      1618.01
Pala                           1999-01      3263.93
Cloverdale                     1999-01        52.64
Cloverdale                     1999-02       266.28
San Francisco                  1999-01      3058.27
San Mateo                      1999-01      8754.59
Los Angeles                    1999-01      1886.19
San Mateo                      1999-02     21399.42
Pala                           1999-02       936.62
El Sobrante                    1999-02      3744.03
El Sobrante                    1999-01      5392.34
Quartzhill                     1999-01        987.3
Legrand                        1999-01        26.32
Pescadero                      1999-01        26.32
Arbuckle                       1999-02        241.2
Quartzhill                     1999-02       412.83
Montara                        1999-01       289.07
Arbuckle                       1999-01       270.08
San Francisco                  1999-02        11257
Los Angeles                    1999-02      2128.59
Pescadero                      1999-02       298.44
Legrand                        1999-02        18.66
22 rows selected.

优化器使用临时表SYS_TEMP_0FD9D6893_63D6F82来代替customers表,并且使用临时表中的相关列来替换所引用的列cust_id和cust_city。数据库创建带有两列(c0 number,c1 varchar2(30))的临时表(从执行计划中的 6 - (rowset=256) "C0"[NUMBER,22], "C1"[VARCHAR2,30]也可以看到)。这些列关联到customers表中的cust_id和cust_city列。

在下面的执行计划中的1,2,3行物化customers子查询到临时表中,在第6行,数据库扫描临时表(代替子查询)来从事实表中构建位图。第27行扫描临时表执行连接返回代替扫描customers表。数据库不用对临时表应用customer表上的过滤条件,因为在物化临时表时已经应用了过滤条件。

SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced allstats last runstats_last peeked_binds'));
SQL_ID  a069wzk60bbqd, child number 2
-------------------------------------
SELECT c.cust_city, t.calendar_quarter_desc, SUM(s.amount_sold)
sales_amount FROM sales s, times t, customers c, channels ch WHERE
s.time_id = t.time_id AND s.cust_id = c.cust_id AND s.channel_id =
ch.channel_id AND c.cust_state_province = 'CA' AND ch.channel_desc =
'Internet' AND t.calendar_quarter_desc IN ('1999-01','1999-02') GROUP
BY c.cust_city, t.calendar_quarter_desc
Plan hash value: 2164696140
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name                       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Pstart| Pstop | A-Rows |   A-Time   | Buffers | Reads  | Writes |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                            |      1 |        |       |  1177 (100)|          |       |       |     22 |00:00:00.25 |    9080 |     86 |     10 |       |       |          |
|   1 |  TEMP TABLE TRANSFORMATION         |                            |      1 |        |       |            |          |       |       |     22 |00:00:00.25 |    9080 |     86 |     10 |       |       |          |
|   2 |   LOAD AS SELECT                   | SYS_TEMP_0FD9D6893_63D6F82 |      1 |        |       |            |          |       |       |      0 |00:00:00.04 |    1535 |      0 |     10 |  1042K|  1042K|          |
|*  3 |    TABLE ACCESS FULL               | CUSTOMERS                  |      1 |   3341 | 86866 |   423   (1)| 00:00:01 |       |       |   3341 |00:00:00.01 |    1522 |      0 |      0 |       |       |          |
|   4 |   HASH GROUP BY                    |                            |      1 |    877 | 49989 |   754   (1)| 00:00:01 |       |       |     22 |00:00:00.20 |    7538 |     85 |      0 |  1022K|  1022K| 1349K (0)|
|*  5 |    HASH JOIN                       |                            |      1 |  14534 |   809K|   753   (1)| 00:00:01 |       |       |    964 |00:00:00.20 |    7538 |     85 |      0 |  1572K|  1572K| 1696K (0)|
|   6 |     TABLE ACCESS FULL              | SYS_TEMP_0FD9D6893_63D6F82 |      1 |   3341 | 50115 |     4   (0)| 00:00:01 |       |       |   3341 |00:00:00.01 |      18 |     10 |      0 |       |       |          |
|*  7 |     HASH JOIN                      |                            |      1 |  14534 |   596K|   749   (1)| 00:00:01 |       |       |    964 |00:00:00.19 |    7520 |     75 |      0 |  1538K|  1538K| 1685K (0)|
|*  8 |      TABLE ACCESS FULL             | TIMES                      |      1 |    181 |  2896 |    18   (0)| 00:00:01 |       |       |    181 |00:00:00.01 |      65 |      0 |      0 |       |       |          |
|   9 |      VIEW                          | VW_ST_A3F94988             |      1 |  14534 |   369K|   731   (1)| 00:00:01 |       |       |    964 |00:00:00.18 |    7455 |     75 |      0 |       |       |          |
|  10 |       NESTED LOOPS                 |                            |      1 |  14534 |   809K|   706   (1)| 00:00:01 |       |       |    964 |00:00:00.18 |    7455 |     75 |      0 |       |       |          |
|  11 |        PARTITION RANGE SUBQUERY    |                            |      1 |  14534 |   397K|   353   (0)| 00:00:01 |KEY(SQ)|KEY(SQ)|    964 |00:00:00.17 |    7271 |     75 |      0 |       |       |          |
|  12 |         BITMAP CONVERSION TO ROWIDS|                            |      2 |  14534 |   397K|   353   (0)| 00:00:01 |       |       |    964 |00:00:00.16 |    7204 |     75 |      0 |       |       |          |
|  13 |          BITMAP AND                |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.16 |    7204 |     75 |      0 |       |       |          |
|  14 |           BITMAP MERGE             |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.02 |      15 |      5 |      0 |  1024K|   512K| 4096  (0)|
|  15 |            BITMAP KEY ITERATION    |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.02 |      15 |      5 |      0 |       |       |          |
|  16 |             BUFFER SORT            |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.01 |       9 |      0 |      0 | 73728 | 73728 |          |
|* 17 |              TABLE ACCESS FULL     | CHANNELS                   |      1 |      1 |    13 |     3   (0)| 00:00:01 |       |       |      1 |00:00:00.01 |       9 |      0 |      0 |       |       |          |
|* 18 |             BITMAP INDEX RANGE SCAN| SALES_CHANNEL_BIX          |      2 |        |       |            |          |KEY(SQ)|KEY(SQ)|      2 |00:00:00.02 |       6 |      5 |      0 |       |       |          |
|  19 |           BITMAP MERGE             |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.02 |     445 |      9 |      0 |  1024K|   512K|39936  (0)|
|  20 |            BITMAP KEY ITERATION    |                            |      2 |        |       |            |          |       |       |    181 |00:00:00.02 |     445 |      9 |      0 |       |       |          |
|  21 |             BUFFER SORT            |                            |      2 |        |       |            |          |       |       |    362 |00:00:00.01 |      65 |      0 |      0 | 73728 | 73728 |          |
|* 22 |              TABLE ACCESS FULL     | TIMES                      |      1 |    181 |  2896 |    18   (0)| 00:00:01 |       |       |    181 |00:00:00.01 |      65 |      0 |      0 |       |       |          |
|* 23 |             BITMAP INDEX RANGE SCAN| SALES_TIME_BIX             |    362 |        |       |            |          |KEY(SQ)|KEY(SQ)|    181 |00:00:00.02 |     380 |      9 |      0 |       |       |          |
|  24 |           BITMAP MERGE             |                            |      2 |        |       |            |          |       |       |      2 |00:00:00.13 |    6744 |     61 |      0 |  1024K|   512K|45056  (0)|
|  25 |            BITMAP KEY ITERATION    |                            |      2 |        |       |            |          |       |       |    403 |00:00:00.12 |    6744 |     61 |      0 |       |       |          |
|  26 |             BUFFER SORT            |                            |      2 |        |       |            |          |       |       |   6682 |00:00:00.01 |      18 |      0 |      0 |  5512K|   964K|  174K (0)|
|  27 |              TABLE ACCESS FULL     | SYS_TEMP_0FD9D6893_63D6F82 |      1 |   3341 | 16705 |     4   (0)| 00:00:01 |       |       |   3341 |00:00:00.01 |      18 |      0 |      0 |       |       |          |
|* 28 |             BITMAP INDEX RANGE SCAN| SALES_CUST_BIX             |   6682 |        |       |            |          |KEY(SQ)|KEY(SQ)|    403 |00:00:00.10 |    6726 |     61 |      0 |       |       |          |
|  29 |        TABLE ACCESS BY USER ROWID  | SALES                      |    964 |      1 |    29 |   378   (0)| 00:00:01 | ROWID | ROWID |    964 |00:00:00.01 |     184 |      0 |      0 |       |       |          |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------1 - SEL$D5EF75992 - SEL$F6045C7B3 - SEL$F6045C7B / C@SEL$F6045C7B6 - SEL$D5EF7599 / T1@SEL$9C741BEB8 - SEL$D5EF7599 / T@SEL$19 - SEL$5E9A798F / VW_ST_A3F94988@SEL$D5EF759910 - SEL$5E9A798F12 - SEL$5E9A798F / S@SEL$117 - SEL$6EE793B7 / CH@SEL$6EE793B722 - SEL$ACF30367 / T@SEL$ACF3036727 - SEL$E1F9C76C / T1@SEL$E1F9C76C29 - SEL$5E9A798F / SYS_CP_S@SEL$5E9A798F
Outline Data
-------------/*+BEGIN_OUTLINE_DATAIGNORE_OPTIM_EMBEDDED_HINTSOPTIMIZER_FEATURES_ENABLE('12.2.0.1')DB_VERSION('12.2.0.1')OPT_PARAM('star_transformation_enabled' 'true')ALL_ROWSNO_PARALLELOUTLINE_LEAF(@"SEL$F6045C7B")OUTLINE_LEAF(@"SEL$ACF30367")OUTLINE_LEAF(@"SEL$6EE793B7")OUTLINE_LEAF(@"SEL$E1F9C76C")OUTLINE_LEAF(@"SEL$5E9A798F")TABLE_LOOKUP_BY_NL(@"SEL$0E028FD0" "S"@"SEL$1")OUTLINE_LEAF(@"SEL$D5EF7599")OUTLINE(@"SEL$1")OUTLINE(@"SEL$0E028FD0")OUTLINE(@"SEL$C3AF6D21")ELIMINATE_JOIN(@"SEL$1" "CH"@"SEL$1")OUTLINE(@"SEL$5208623C")STAR_TRANSFORMATION(@"SEL$1" "S"@"SEL$1" SUBQUERIES(("T"@"SEL$1") ("CH"@"SEL$1") TEMP_TABLE("C"@"SEL$1")))FULL(@"SEL$D5EF7599" "T"@"SEL$1")NO_ACCESS(@"SEL$D5EF7599" "VW_ST_A3F94988"@"SEL$D5EF7599")FULL(@"SEL$D5EF7599" "T1"@"SEL$9C741BEB")LEADING(@"SEL$D5EF7599" "T"@"SEL$1" "VW_ST_A3F94988"@"SEL$D5EF7599" "T1"@"SEL$9C741BEB")USE_HASH(@"SEL$D5EF7599" "VW_ST_A3F94988"@"SEL$D5EF7599")USE_HASH(@"SEL$D5EF7599" "T1"@"SEL$9C741BEB")SWAP_JOIN_INPUTS(@"SEL$D5EF7599" "T1"@"SEL$9C741BEB")USE_HASH_AGGREGATION(@"SEL$D5EF7599")BITMAP_AND(@"SEL$5E9A798F" "S"@"SEL$1" ("SALES"."CHANNEL_ID") 1)BITMAP_AND(@"SEL$5E9A798F" "S"@"SEL$1" ("SALES"."TIME_ID") 2)BITMAP_AND(@"SEL$5E9A798F" "S"@"SEL$1" ("SALES"."CUST_ID") 3)ROWID(@"SEL$5E9A798F" "SYS_CP_S"@"SEL$5E9A798F")LEADING(@"SEL$5E9A798F" "S"@"SEL$1" "SYS_CP_S"@"SEL$5E9A798F")SUBQUERY_PRUNING(@"SEL$5E9A798F" "S"@"SEL$1" PARTITION)USE_NL(@"SEL$5E9A798F" "SYS_CP_S"@"SEL$5E9A798F")FULL(@"SEL$E1F9C76C" "T1"@"SEL$E1F9C76C")SEMIJOIN_DRIVER(@"SEL$E1F9C76C")FULL(@"SEL$6EE793B7" "CH"@"SEL$6EE793B7")SEMIJOIN_DRIVER(@"SEL$6EE793B7")FULL(@"SEL$ACF30367" "T"@"SEL$ACF30367")SEMIJOIN_DRIVER(@"SEL$ACF30367")FULL(@"SEL$F6045C7B" "C"@"SEL$F6045C7B")SEMIJOIN_DRIVER(@"SEL$F6045C7B")END_OUTLINE_DATA*/
Predicate Information (identified by operation id):
---------------------------------------------------3 - filter("C"."CUST_STATE_PROVINCE"='CA')5 - access("ITEM_1"="C0")7 - access("ITEM_2"="T"."TIME_ID")8 - filter(("T"."CALENDAR_QUARTER_DESC"='1999-01' OR "T"."CALENDAR_QUARTER_DESC"='1999-02'))17 - filter("CH"."CHANNEL_DESC"='Internet')18 - access("S"."CHANNEL_ID"="CH"."CHANNEL_ID")22 - filter(("T"."CALENDAR_QUARTER_DESC"='1999-01' OR "T"."CALENDAR_QUARTER_DESC"='1999-02'))23 - access("S"."TIME_ID"="T"."TIME_ID")28 - access("S"."CUST_ID"="C0")
Column Projection Information (identified by operation id):
-----------------------------------------------------------1 - "C1"[VARCHAR2,30], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7], SUM("ITEM_3")[22]2 - SYSDEF[4], SYSDEF[0], SYSDEF[1], SYSDEF[120], SYSDEF[0]3 - "C"."CUST_ID"[NUMBER,22], "C"."CUST_CITY"[VARCHAR2,30], "C"."CUST_STATE_PROVINCE"[VARCHAR2,40]4 - "C1"[VARCHAR2,30], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7], SUM("ITEM_3")[22]5 - (#keys=1; rowset=256) "C0"[NUMBER,22], "ITEM_1"[NUMBER,22], "C1"[VARCHAR2,30], "T"."TIME_ID"[DATE,7], "ITEM_2"[DATE,7], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7], "ITEM_3"[NUMBER,22]6 - (rowset=256) "C0"[NUMBER,22], "C1"[VARCHAR2,30]7 - (#keys=1; rowset=256) "T"."TIME_ID"[DATE,7], "ITEM_2"[DATE,7], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7], "ITEM_1"[NUMBER,22], "ITEM_3"[NUMBER,22]8 - (rowset=256) "T"."TIME_ID"[DATE,7], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7]9 - "ITEM_1"[NUMBER,22], "ITEM_2"[DATE,7], "ITEM_3"[NUMBER,22]10 - ROWID[ROWID,10], ROWID[ROWID,10], "S"."CUST_ID"[NUMBER,22], "S"."TIME_ID"[DATE,7], "S"."AMOUNT_SOLD"[NUMBER,22]11 - ROWID[ROWID,10]12 - ROWID[ROWID,10]13 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 32496]14 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 32496]15 - STRDEF[10], STRDEF[10], STRDEF[7920], "S"."CHANNEL_ID"[NUMBER,22]16 - (#keys=2) "CH"."CHANNEL_ID"[NUMBER,22], "CH"."CHANNEL_DESC"[VARCHAR2,20]17 - (rowset=256) "CH"."CHANNEL_ID"[NUMBER,22], "CH"."CHANNEL_DESC"[VARCHAR2,20]18 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 7920], "S"."CHANNEL_ID"[NUMBER,22]19 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 32496]20 - STRDEF[10], STRDEF[10], STRDEF[7920], "S"."TIME_ID"[DATE,7]21 - (#keys=2) "T"."TIME_ID"[DATE,7], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7]22 - (rowset=256) "T"."TIME_ID"[DATE,7], "T"."CALENDAR_QUARTER_DESC"[CHARACTER,7]23 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 7920], "S"."TIME_ID"[DATE,7]24 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 32496]25 - STRDEF[10], STRDEF[10], STRDEF[7920], "S"."CUST_ID"[NUMBER,22]26 - (#keys=1) "C0"[NUMBER,22]27 - (rowset=256) "C0"[NUMBER,22]28 - STRDEF[BM VAR, 10], STRDEF[BM VAR, 10], STRDEF[BM VAR, 7920], "S"."CUST_ID"[NUMBER,22]29 - ROWID[ROWID,10], "S"."CUST_ID"[NUMBER,22], "S"."TIME_ID"[DATE,7], "S"."AMOUNT_SOLD"[NUMBER,22]
Note
------ automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold- cbqt star transformation used for this statement- this is an adaptive plan

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-2217537/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26015009/viewspace-2217537/

Oracle 12CR2查询转换之临时表转换相关推荐

  1. oracle 临时表子查询,Oracle 12CR2查询转换教程之临时表转换详解

    前言 大家都知道在12CR2中出现一种新的查询转换技术临时表转换, 在下面的例子中,数据库对customers表上的子查询结果物化到一个临时表中: SQL> show parameter sta ...

  2. Oracle 12CR2查询转换之星型转换

    星型转换是一种优化转换它用来避免对星型方案中的事实表进行全表扫描.一个星型方案将数据分成事实与维度表.事实是对一个事件比如销售的测量通常是数字.维度是标识事实的分类,比如日期,位置与产品.一个事实表有 ...

  3. Oracle 12CR2查询转换之视图合并

    这里的测试数据库版本为12.2.0.1,在视图合并中,优化器代表视图的查询块到包含视国的查询块中.视图合并通过让优化器考虑额外的连接顺序,访问方法与其它转换来提高性能.例如,在一个视图被合并后并且在一 ...

  4. oracle xdb xquery,Oracle XQuery查询、构建和转换XML(4)

    将动态变量绑定到 XQuery 表达式 另一种可以显著提高 XQuery 表达式执行性能的技术是使用绑定动态变量.使用绑定变量(而不是将变量串联为字符串)可以使 Oracle 重用 SQL 语句,从而 ...

  5. Oracle 12CR2查询转换之谓词推送

    在谓词推送中,优化器将包含在查询块中的相关谓词推送到视图查询块中.对于不能合并的视图,这种技术可以提高不能合并视图的执行计划.数据库可以使用推送谓词来访问索引或作为过滤. 例如,假设创建了一个hr.c ...

  6. Oracle 12CR2查询转换之表扩展

    在表扩展中,对于读取一个分区表部分数据时优化器会生成使用索引的执行计划.基于索引执行计划可以提高性能,但索引维护会增加开锁.在许多数据库中,DML只影响小部分数据.对于频繁更新的表表扩展使用基于索引的 ...

  7. oracle+xquery函数,Oracle XQuery查询、构建和转换XML

    查询 Oracle XML DB 信息库中的 XML 数据 为访问 Oracle XML DB 信息库中存储的 XML 数据,Oracle XQuery 引入了 fn:doc 和 fn:collect ...

  8. oracle+xquery函数,Oracle XQuery查询、构建和转换XML(2)

    查询 Oracle XML DB 信息库中的 XML 数据 为访问 Oracle XML DB 信息库中存储的 XML 数据,Oracle XQuery 引入了 fn:doc 和 fn:collect ...

  9. cursor is oracle 日期_Oracle 12CR2查询转换之cursor-duration临时表

    在Oracle12C中为了物化查询的中间结果,Oracle数据库在查询编译时在内存中可能会隐式的创建一个cursor_duration临时表. Cursor-Duration临时表的作用 复杂查询有时 ...

最新文章

  1. H5画布不显示图片的问题解决
  2. SQL Server 2000 从哪里看是哪个版本
  3. C++中相对路径和绝对路径
  4. Apache Commons 工具集使用简介
  5. Eclipse,NetBeans及IntelliJ—Java IDE大战之NetBeans篇
  6. 详解虚函数的实现过程之多重继承(3)
  7. vue中mixin的一点理解
  8. docker环境,搭建kafka集群
  9. 引入jQuery的src设置
  10. ftk学习记(脚本篇)
  11. 圣杯布局——针对前端小白篇
  12. linux下mysql 8.0忘记密码后重置密码
  13. java 压缩 空目录_java zip压缩与解压-支持空目录,保留文件修改时间
  14. 【干货】22道机器学习常见面试题目
  15. 【论文整理】NAACL2019+AAAI2019文本分类论文摘要
  16. python颜值测试器
  17. 计算机 90学时培训总结,90学时培训心得体会
  18. 字符集(Character Set)和字符编码(Character Encoding)
  19. ai描边工具怎么打开_ai描边面板怎么调出来? ai找不到描边面板的解决办法
  20. python图片转手绘软件_Python手绘可视化工具cutecharts使用实例

热门文章

  1. 披阅十载,84岁图灵奖得主高德纳的《计算机程序设计艺术:卷4B》终于出版
  2. 光明日报:当教育遇上区块链,会擦出什么火花
  3. java lru算法栈_LRU算法的Java实现
  4. Vue中视图层的拆分
  5. SOUI界面库 第1讲-开发环境搭建
  6. 扎西拉姆·多多的《见与不见》
  7. 重定向 php_如何使用PHP重定向
  8. 快速揭开Word制表位设置的神秘面纱【系统收藏】
  9. JS数组去重 ES6 方法
  10. 【电子学会】2021年12月Python二级 -- 编程题37