免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1328 | 回复: 0
打印 上一主题 下一主题

[求助] 请教一个Oracle的层次查询(connect by)问题 [复制链接]

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-26 16:56 |只看该作者 |倒序浏览
本帖最后由 asdf2110 于 2012-10-26 17:26 编辑


疑问:
where 子句只是由 a1 + b2 = prior b1 和 a1 + 1 = prior b1  的区别,为什么得到的查询计划会差这么大呢?主要是FILTER 的位置,在线等待牛人解答

代码如下:

SQL> SELECT * FROM TEST1, TEST2 where a1 + b2 = prior b1 CONNECT BY LEVEL < 3 START WITH A2 = -1;
未选定行


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

-------------------------------------------------------------------------------------------------
| Id  | Operation                               | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                        |       |     1 |    58 |     7   (0)| 00:00:01 |
|*  1 |  CONNECT BY NO FILTERING WITH START-WITH|       |       |       |            |          |
|   2 |   NESTED LOOPS                          |       |     1 |    58 |     7   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL                    | TEST2 |     2 |    58 |     3   (0)| 00:00:01 |
|*  4 |    TABLE ACCESS FULL                    | TEST1 |     1 |    29 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------


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

   1 - filter(LEVEL<3 AND "A2"=(-1))
   4 - filter("A1"+"B2"=PRIOR "B1")

Note
-----
   - dynamic sampling used for this statement

SQL> SELECT * FROM TEST1, TEST2 where a1 + 1 = prior b1 CONNECT BY LEVEL < 3 START WITH A2 = -1;

        A1         A2 A         B1         B2 B
---------- ---------- - ---------- ---------- -
         2          1 B          4          2 D
         2          1 B          3          1 C


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

--------------------------------------------------------------------------------------------------
| Id  | Operation                                | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                         |       |     6 |   348 |     7   (0)| 00:00:01 |
|*  1 |  FILTER                                  |       |       |       |            |          |
|*  2 |   CONNECT BY NO FILTERING WITH START-WITH|       |       |       |            |          |
|   3 |    MERGE JOIN CARTESIAN                  |       |     6 |   348 |     7   (0)| 00:00:01 |
|   4 |     TABLE ACCESS FULL                    | TEST2 |     2 |    58 |     3   (0)| 00:00:01 |
|   5 |     BUFFER SORT                          |       |     3 |    87 |     4   (0)| 00:00:01 |
|   6 |      TABLE ACCESS FULL                   | TEST1 |     3 |    87 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------


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

   1 - filter("A1"+1=PRIOR "B1")
   2 - filter(LEVEL<3 AND "A2"=(-1))

Note
-----
   - dynamic sampling used for this statement

SQL>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP