暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入SQL执行计划之CBO查询转换(4):Group By 配置最优机能(Group By Placement)

450

编者按:

本文作者系杨昱明,现就职于甲骨文公司,从事数据库方面的技术支持。希望能通过发表文章,把一些零散的知识再整理整理。个人主页:https://blog.csdn.net/weixin_50513167,经其本人授权发布。

【免责声明】本公众号文章仅代表个人观点,与任何公司无关。

讲过的转换是当存在 View,子查询时,把子查询展开,或者把谓词下推给子查询。

那是不是说 CBO 只是盯着 View,或子查询来做工作呢,结论当然不是了。

比如2张表进行结合,并对其中一个表进行了 Group by 操作时,如果能先进行 Group by 的结果集再和另外的表进行结合的话,可能会有更好的效果。

于是乎,就有了Group By 配置最优机能(Group By Placement)。

Group By 配置最优机能(Group By Placement)

还是老样子,先看看最初没经过转换时的样子。

    drop table t1 purge;
    drop table t2 purge;
    create table t1(c1 number, c2 number not null);
    create table t2(c1 number, c2 number not null);
    insert into t1 values (1,1);
    insert into t1 values (1,2);
    insert into t1 values (2,2);
    insert into t2 values (1,2);
    commit;


    SQL> select sum(t1.c2), t2.c2
    from t1,t2
    where t1.c1 = t2.c1
    group by t2.c2; 2 3 4


    SUM(T1.C2) C2
    ---------- ----------
    3 2




    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 51733071


    ----------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    ----------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 2 | 104 | 7 (15)| 00:00:01 |
    | 1 | HASH GROUP BY | | 2 | 104 | 7 (15)| 00:00:01 |
    |* 2 | HASH JOIN | | 2 | 104 | 6 (0)| 00:00:01 |
    | 3 | TABLE ACCESS FULL| T2 | 1 | 26 | 3 (0)| 00:00:01 |
    | 4 | TABLE ACCESS FULL| T1 | 3 | 78 | 3 (0)| 00:00:01 |
    ----------------------------------------------------------------------------


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


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

    当然是先正常的 t1 t2 的结合,结合后的结果再进行 GROUP BY。

    接下来,我们再看看 Group By 配置最优机能动作时的样子。

      SQL> select /*+ PLACE_GROUP_BY((t1)) */ sum(t1.c2), t2.c2
      from t1,t2
      where t1.c1 = t2.c1
      group by t2.c2; 2 3 4


      SUM(T1.C2) C2
      ---------- ----------
      3 2




      Execution Plan
      ----------------------------------------------------------
      Plan hash value: 2158485392


      ----------------------------------------------------------------------------------
      | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
      ----------------------------------------------------------------------------------
      | 0 | SELECT STATEMENT | | 3 | 156 | 8 (25)| 00:00:01 |
      | 1 | HASH GROUP BY | | 3 | 156 | 8 (25)| 00:00:01 |
      |* 2 | HASH JOIN | | 3 | 156 | 7 (15)| 00:00:01 |
      | 3 | TABLE ACCESS FULL | T2 | 1 | 26 | 3 (0)| 00:00:01 |
      | 4 | VIEW | VW_GBC_1 | 3 | 78 | 4 (25)| 00:00:01 |
      | 5 | HASH GROUP BY | | 3 | 78 | 4 (25)| 00:00:01 |
      | 6 | TABLE ACCESS FULL| T1 | 3 | 78 | 3 (0)| 00:00:01 |
      ----------------------------------------------------------------------------------


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


      2 - access("ITEM_1"="T2"."C1")

      t1 表被转换成 VW_GBC_1,这个 View 里先作 GROUP BY 处理,结果集再和 t2 进行结合。这个机能动作时的标识就是 VW_GBC_n 这个 View 名。

      最后,想要关闭或者无效这个机能可以用以下方法:

        “_optimizer_group_by_placement”=FALSE

        OR

        使用 NO_PLACE_GROUP_BY hint。

        至此,CBO 的 SQL 自动转换这总结分享也就告一段落。希望能对各位同学有所帮助。如果能提出您的宝贵意见,那就非常荣幸了。

        后续文章更加精彩,欢迎关注本公众号或访问【阅读原文】。

        ——End——

        专注于技术不限于技术!

        用碎片化的时间,一点一滴地提高数据库技术和个人能力。

        欢迎关注!

        手把手系列(帮助个人技术成长):

        SQL调优和诊断从哪入手?

        获取SQL执行计划最基础的方法是啥?

        一学就会的获取SQL执行计划和性能统计信息的方法

        在线Oracle SQL学习环境--Live SQL

        Oracle优化器架构变化和特定行为

        获取历史执行计划:AWR/StatsPack SQL 报告

        Oracle SQL 性能调优:使用SqlPatch固定执行计划

        供收藏:Oracle固定SQL执行计划的方法总结

        CBO 查询转换系列(了解Oracle优化器)

        CBO 查询变化(1):子查询展开机能(Subquery Unnesting)

        CBO 查询转换(2):反结合的NULL识别机能(null aware anti-join )

        CBO 查询转换(3):结合谓词下推机能(Join Predicate Pushdown)

        文章转载自Oracle数据库技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论