频道栏目
读书频道 > 数据库 > Oracle > Oracle 高性能SQL引擎剖析
3.1.2.4 互关联子查询的反嵌套
2012-12-31 08:16:56     我来说两句
收藏   我要投稿

本文所属图书 > Oracle 高性能SQL引擎剖析

Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括:第一篇执行计划...  立即去当当网订购

转换器对互关联子查询的反嵌套,会将子查询构造出一个内联视图,并将内联视图与主查询中的表进行关联。互关联子查询的反嵌套可以由参数_unnest_subquery控制。这种转换属于启发式查询转换。示例如代码清单3-7所示。

代码清单3-7 互关联子查询的反嵌套
HELLODBA.COM>exec sql_explain('select * from t_users u where created > (select
             /*+qb_name(inv)*/max(created) from t_objects o where u.username=o.owner)', 'TYPICAL OUTLINE');
Plan hash value: 2385613560

---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |     1 |   112 |    57   (4)| 00:00:58 |
|   1 |  MERGE JOIN                  |              |     1 |   112 |    57   (4)| 00:00:58 |
|   2 |   TABLE ACCESS BY INDEX ROWID| T_USERS      |    41 |  3526 |     1   (0)| 00:00:02 |
|   3 |    INDEX FULL SCAN           | T_USERS_IDX2 |    41 |       |     1   (0)| 00:00:02 |
|*  4 |   FILTER                     |              |       |       |            |          |
|*  5 |    SORT JOIN                 |              |    22 |   572 |    56   (4)| 00:00:57 |
|   6 |     VIEW                     | VW_SQ_1      |    22 |   572 |    55   (2)| 00:00:56 |
|   7 |      SORT GROUP BY           |              |    22 |   374 |    55   (2)| 00:00:56 |
|   8 |       TABLE ACCESS FULL      | T_OBJECTS    | 47585 |   789K|    54   (0)| 00:00:55 |
---------------------------------------------------------------------------------------------

Outline Data
-------------
  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"SEL$2D2FF62D" "O"@"INV")
      USE_MERGE(@"SEL$7920AA66" "VW_SQ_1"@"SEL$250DBE7D")
      LEADING(@"SEL$7920AA66" "U"@"SEL$1" "VW_SQ_1"@"SEL$250DBE7D")
      NO_ACCESS(@"SEL$7920AA66" "VW_SQ_1"@"SEL$250DBE7D")
      INDEX(@"SEL$7920AA66" "U"@"SEL$1" ("T_USERS"."USERNAME"))
      OUTLINE(@"SEL$1")
      OUTLINE(@"SEL$250DBE7D")
      OUTLINE(@"SEL$2D2FF62D")
      OUTLINE(@"INV")
      UNNEST(@"INV")
      OUTLINE_LEAF(@"SEL$7920AA66")
      OUTLINE_LEAF(@"SEL$2D2FF62D")
      OPT_PARAM('optimizer_index_cost_adj' 60)
      OPTIMIZER_FEATURES_ENABLE('10.2.0.4')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------
   4 - filter("CREATED">"VW_COL_1")
   5 - access("U"."USERNAME"="OWNER")
       filter("U"."USERNAME"="OWNER")

在上例中,关联谓词中存在子查询,该子查询被展开,其中的对象与主查询中的对象直接进行关联操作。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.1.2.3 NOT IN/NOT EXISTS转换为Null-Aware ANTI-JOIN(11g)
下一篇:3.1.2.5 含有标量子查询的反嵌套
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站