博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11gr2全外连接优化执行计划(二)
阅读量:6671 次
发布时间:2019-06-25

本文共 4846 字,大约阅读时间需要 16 分钟。

在11.2中,Oracle对于全外连接的执行计划进行了优化。

这篇介绍新增的两个相关的HINT。

11gr2全外连接优化执行计划:

 

 

Oracle在推出了新的执行计划的同时,还提供了两个控制这个执行计划的提示NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN。

这两个HINT的使用十分简单,不需要其他的任何参数。下面继续上一篇文章的例子:

SQL> SELECT /*+ NO_NATIVE_FULL_OUTER_JOIN */ T1.ID, T2.ID

  2  FROM T1 FULL OUTER JOIN T2
  3  ON T1.ID = T2.ID;

        ID         ID

---------- ----------
         2          2
         3          3
         4          4
         5          5
         6          6
         7          7
         8          8
         1
         0
                   10
                    9

已选择11行。

执行计划
----------------------------------------------------------
Plan hash value: 2841162349

-----------------------------------------------------------------------------

| Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |      |    18 |   468 |    17   (6)| 00:00:01 |
|   1 |  VIEW                |      |    18 |   468 |    17   (6)| 00:00:01 |
|   2 |   UNION-ALL          |      |       |       |            |          |
|*  3 |    HASH JOIN OUTER   |      |     9 |   234 |     9  (12)| 00:00:01 |
|   4 |     TABLE ACCESS FULL| T1   |     9 |   117 |     4   (0)| 00:00:01 |
|   5 |     TABLE ACCESS FULL| T2   |     9 |   117 |     4   (0)| 00:00:01 |
|*  6 |    HASH JOIN ANTI    |      |     9 |   234 |     9  (12)| 00:00:01 |
|   7 |     TABLE ACCESS FULL| T2   |     9 |   117 |     4   (0)| 00:00:01 |
|   8 |     TABLE ACCESS FULL| T1   |     9 |   117 |     4   (0)| 00:00:01 |
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - access("T1"."ID"="T2"."ID"(+))

   6 - access("T1"."ID"="T2"."ID")

Note

-----
   - dynamic sampling used for this statement (level=2)

统计信息
----------------------------------------------------------
         13  recursive calls
          0  db block gets
         61  consistent gets
          0  physical reads
          0  redo size
        733  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         11  rows processed

SQL> SELECT /*+ NATIVE_FULL_OUTER_JOIN */ T1.ID, T2.ID

  2  FROM T1 FULL OUTER JOIN T2
  3  ON T1.ID = T2.ID;

        ID         ID

---------- ----------
         2          2
         3          3
         4          4
         5          5
         6          6
         7          7
         8          8
                    9
                   10
         1
         0

已选择11行。

执行计划
----------------------------------------------------------
Plan hash value: 53297166

----------------------------------------------------------------------------------

| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |     9 |   234 |     9  (12)| 00:00:01 |
|   1 |  VIEW                 | VW_FOJ_0 |     9 |   234 |     9  (12)| 00:00:01 |
|*  2 |   HASH JOIN FULL OUTER|          |     9 |   234 |     9  (12)| 00:00:01 |
|   3 |    TABLE ACCESS FULL  | T1       |     9 |   117 |     4   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL  | T2       |     9 |   117 |     4   (0)| 00:00:01 |
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

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

Note

-----
   - dynamic sampling used for this statement (level=2)

统计信息
----------------------------------------------------------
          7  recursive calls
          0  db block gets
         31  consistent gets
          0  physical reads
          0  redo size
        733  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         11  rows processed

如果两个HINT同时存在,则Oracle选择NO_NATIVE_FULL_OUTER_JOIN提示生效,而忽略NATIVE_FULL_OUTER_JOIN:

SQL> SELECT /*+ NATIVE_FULL_OUTER_JOIN NO_NATIVE_FULL_OUTER_JOIN */ T1.ID, T2.ID

  2  FROM T1 FULL OUTER JOIN T2
  3  ON T1.ID = T2.ID;

        ID         ID

---------- ----------
         2          2
         3          3
         4          4
         5          5
         6          6
         7          7
         8          8
         1
         0
                   10
                    9

已选择11行。

执行计划
----------------------------------------------------------
Plan hash value: 2841162349

-----------------------------------------------------------------------------

| Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |      |    18 |   468 |    17   (6)| 00:00:01 |
|   1 |  VIEW                |      |    18 |   468 |    17   (6)| 00:00:01 |
|   2 |   UNION-ALL          |      |       |       |            |          |
|*  3 |    HASH JOIN OUTER   |      |     9 |   234 |     9  (12)| 00:00:01 |
|   4 |     TABLE ACCESS FULL| T1   |     9 |   117 |     4   (0)| 00:00:01 |
|   5 |     TABLE ACCESS FULL| T2   |     9 |   117 |     4   (0)| 00:00:01 |
|*  6 |    HASH JOIN ANTI    |      |     9 |   234 |     9  (12)| 00:00:01 |
|   7 |     TABLE ACCESS FULL| T2   |     9 |   117 |     4   (0)| 00:00:01 |
|   8 |     TABLE ACCESS FULL| T1   |     9 |   117 |     4   (0)| 00:00:01 |
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - access("T1"."ID"="T2"."ID"(+))

   6 - access("T1"."ID"="T2"."ID")

Note

-----
   - dynamic sampling used for this statement (level=2)

统计信息
----------------------------------------------------------
         13  recursive calls
          0  db block gets
         61  consistent gets
          0  physical reads
          0  redo size
        733  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         11  rows processed

 

 

转载地址:http://xfmxo.baihongyu.com/

你可能感兴趣的文章
稀疏矩阵的压缩存储和转置
查看>>
华为S5700交换机开启WEB配置
查看>>
mysql主从同步错误解决和Slave_IO_Running: NO
查看>>
Coding and Paper Letter(十七)
查看>>
感谢51CTO提供这个平台让我可以分享“姿势”
查看>>
Toast 自定义位置和带图
查看>>
outlook设置gmail邮箱报错:Outlook 无法连接到接收(POP3)电子邮件服务器
查看>>
linux中文件的常用操作
查看>>
php rabbitmq操作类及生产者和消费者实例代码
查看>>
C# 面向对象三大特征 的简单描述
查看>>
Tomcat服务器集群与负载均衡实现
查看>>
我的友情链接
查看>>
crontab使用进程锁flock解决冲突
查看>>
MySQL 5.6 for Windows 解压缩版配置安装
查看>>
linux使用ntfs-3g 挂载NTFS分区
查看>>
森林、域树、域之间的关系? AD与站点之间的关系?
查看>>
shell脚本中执行时提示“没有那个文件或目录”的解决办法
查看>>
手机/移动前端开发需要注意的20个要点
查看>>
[css]vw
查看>>
性能下降曲线
查看>>