0

0

Oracle递归查询的原理

php中文网

php中文网

发布时间:2016-06-07 16:49:52

|

1370人浏览过

|

来源于php中文网

原创

以start with ename =

在oracle 10g下,来到scott用户下,分别以层次 1,2,3,4上的节点做实验:
 
当start with是根节点(level=1),要查其子节点,connect by pump和emp都是被扫描4次(总的层次)。
 
当start with是根节点(level=2),要查其子节点,,connect by pump和emp被扫描3次。
 
当start with是根节点(level=3),要查其子节点,connect by pump和emp被扫描2次。

当start with是根节点(level=4),要查其子节点,connect by pump和emp被扫描1次。

注意的是:leve=2,level=3不是叶子节点,如果是叶子节点,那connect by pump和emp只扫描一次。
 
  Operation            Name    Starts
 
  FILTER             
    TABLE ACCESS FULL    EMP        1
  HASH JOIN         
    CONNECT BY PUMP                  4
    TABLE ACCESS FULL    EMP        4

我来解读上面的执行计划,以start with ename = 'KING'为例,显示对EMP通过"ENAME"='KING'过滤找到节点作为根节点(集合A),通过集合A到下一级所有满足条件的节点(集合B),通过集合B再到下一级所有满足条件的节点(集合C),树有几级就CONNECT BY PUMP几次。

Oracle 函数中游标及递归的应用

Oracle递归函数

淘宝互刷平台刷信誉源码
淘宝互刷平台刷信誉源码

淘宝互刷平台刷信誉源码主要特性:1、系统采用国内著名CMS内核做为基础模块化开发,继承CMS原有强大功能之外,同时拓展任务模块、快递单模块、会员模块、信用评价模块等多个相关模块,支持生成HTML静态和动态ASP,有效的提高了系统的性能,不仅减轻服务器的负载提高搜索收录率,增加网站收录。2、系统主要由淘宝任务、天猫任务、京东任务、阿里任务、拼多多任务、收藏任务、流量任务、快递单生成与查询系统、信用评

下载

Oracle 递归查询

Oracle递归START WITH...CONNECT BY PRIOR子句用法

Oracle 使用递归的性能提示

Oracle递归查询(start with)
 
SQL> set pagesize 100
 SQL> --根节点 level=1
 SQL> select e.empno, e.ename, e.mgr, e.deptno,level
      from emp e
      start with ename = 'KING'
    connect by prior empno = mgr;
 
    EMPNO ENAME            MGR    DEPTNO      LEVEL
 ---------- ---------- ---------- ---------- ----------
      7839 KING                          10          1
      7566 JONES            7839        20          2
      7788 SCOTT            7566        20          3
      7876 ADAMS            7788        20          4
      7902 FORD            7566        20          3
      7369 SMITH            7902        20          4
      7698 BLAKE            7839        30          2
      7499 ALLEN            7698        30          3
      7521 WARD            7698        30          3
      7654 MARTIN          7698        30          3
      7844 TURNER          7698        30          3
      7900 JAMES            7698        30          3
      7782 CLARK            7839        10          2
      7934 MILLER          7782        10          3
 已选择14行。
 SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
 PLAN_TABLE_OUTPUT
 -----------------------------------------------------------------------------------------------------------------------
 ----------------------------------------------------------------------------------------------------
 SQL_ID  6as71p9t5arg3, child number 0
 -------------------------------------
 select e.empno, e.ename, e.mgr, e.deptno,level  from emp e  start with ename = 'KING' connect by prior empno
 = mgr
 Plan hash value: 3364448299
 -----------------------------------------------------------------------------------------------------------------------
 | Id  | Operation                | Name | Starts | E-Rows | A-Rows |  A-Time  | Buffers |  OMem |  1Mem | Used-Mem |
 -----------------------------------------------------------------------------------------------------------------------
 |*  1 |  CONNECT BY WITH FILTERING|      |      1 |        |    14 |00:00:00.01 |      35 |  9216 |  9216 | 8192  (0)|
 |*  2 |  FILTER                  |      |      1 |        |      1 |00:00:00.01 |      7 |      |    |            |
 |  3 |    TABLE ACCESS FULL      | EMP  |      1 |    14 |    14 |00:00:00.01 |      7 |      |    |            |
 |*  4 |  HASH JOIN              |      |      4 |        |    13 |00:00:00.01 |      28 |  1036K|  1036K|  776K (0)|
 |  5 |    CONNECT BY PUMP        |      |      4 |        |    14 |00:00:00.01 |      0 |      |    |            |
 |  6 |    TABLE ACCESS FULL      | EMP  |      4 |    14 |    56 |00:00:00.01 |      28 |      |    |            |
 |  7 |  TABLE ACCESS FULL      | EMP  |      0 |    14 |      0 |00:00:00.01 |      0 |      |    |            |
 -----------------------------------------------------------------------------------------------------------------------
 Predicate Information (identified by operation id):
 ---------------------------------------------------
    1 - filter("ENAME"='KING')
    2 - filter("ENAME"='KING')
    4 - access("MGR"=NULL)
 
SQL> --level=2
 SQL> select e.empno, e.ename, e.mgr, e.deptno,level
      from emp e
      start with ename = 'JONES'
    connect by prior empno = mgr;
      EMPNO ENAME            MGR    DEPTNO      LEVEL
 ---------- ---------- ---------- ---------- ----------
      7566 JONES            7839        20          1
      7788 SCOTT            7566        20          2
      7876 ADAMS            7788        20          3
      7902 FORD            7566        20          2
      7369 SMITH            7902        20          3
 SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
 PLAN_TABLE_OUTPUT
 ------------------------------------------------------------------------------------------------------------------------
 SQL_ID  2bcjwvmbyg7a5, child number 1
 -------------------------------------
 select e.empno, e.ename, e.mgr, e.deptno,level  from emp e  start with ename = 'JONES' connect by prior empno
 = mgr
 Plan hash value: 3364448299
 -----------------------------------------------------------------------------------------------------------------------
 | Id  | Operation                | Name | Starts | E-Rows | A-Rows |  A-Time  | Buffers |  OMem |  1Mem | Used-Mem |
 -----------------------------------------------------------------------------------------------------------------------
 |*  1 |  CONNECT BY WITH FILTERING|      |      1 |        |      5 |00:00:00.01 |      28 |  9216 |  9216 | 8192  (0)|
 |*  2 |  FILTER                  |      |      1 |        |      1 |00:00:00.01 |      7 |      |    |            |
 |  3 |    TABLE ACCESS FULL      | EMP  |      1 |    14 |    14 |00:00:00.01 |      7 |      |    |            |
 |*  4 |  HASH JOIN              |      |      3 |        |      4 |00:00:00.01 |      21 |  1036K|  1036K|  404K (0)|
 |  5 |    CONNECT BY PUMP        |      |      3 |        |      5 |00:00:00.01 |      0 |      |    |            |
 |  6 |    TABLE ACCESS FULL      | EMP  |      3 |    14 |    42 |00:00:00.01 |      21 |      |    |            |
 |  7 |  TABLE ACCESS FULL      | EMP  |      0 |    14 |      0 |00:00:00.01 |      0 |      |    |            |
 -----------------------------------------------------------------------------------------------------------------------
 Predicate Information (identified by operation id):
 ---------------------------------------------------
    1 - filter("ENAME"='JONES')
    2 - filter("ENAME"='JONES')
    4 - access("MGR"=NULL)
 
SQL> --level=3
 SQL> select e.empno, e.ename, e.mgr, e.deptno,level
      from emp e
      start with ename = 'SCOTT'
    connect by prior empno = mgr;
      EMPNO ENAME            MGR    DEPTNO      LEVEL
 ---------- ---------- ---------- ---------- ----------
      7788 SCOTT            7566        20          1
      7876 ADAMS            7788        20          2
 
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
 
PLAN_TABLE_OUTPUT
 -----------------------------------------------------------------------------------------------------------------------
 SQL_ID  fqf7r75c9atqv, child number 0
 -------------------------------------
 select e.empno, e.ename, e.mgr, e.deptno,level  from emp e  start with ename = 'SCOTT' connect by prior empno
 = mgr
 Plan hash value: 3364448299
 -----------------------------------------------------------------------------------------------------------------------
 | Id  | Operation                | Name | Starts | E-Rows | A-Rows |  A-Time  | Buffers |  OMem |  1Mem | Used-Mem |
 -----------------------------------------------------------------------------------------------------------------------
 |*  1 |  CONNECT BY WITH FILTERING|      |      1 |        |      2 |00:00:00.01 |      21 |  9216 |  9216 | 8192  (0)|
 |*  2 |  FILTER                  |      |      1 |        |      1 |00:00:00.01 |      7 |      |    |            |
 |  3 |    TABLE ACCESS FULL      | EMP  |      1 |    14 |    14 |00:00:00.01 |      7 |      |    |            |
 |*  4 |  HASH JOIN              |      |      2 |        |      1 |00:00:00.01 |      14 |  1036K|  1036K|  282K (0)|
 |  5 |    CONNECT BY PUMP        |      |      2 |        |      2 |00:00:00.01 |      0 |      |    |            |
 |  6 |    TABLE ACCESS FULL      | EMP  |      2 |    14 |    28 |00:00:00.01 |      14 |      |    |            |
 |  7 |  TABLE ACCESS FULL      | EMP  |      0 |    14 |      0 |00:00:00.01 |      0 |      |    |            |
 -----------------------------------------------------------------------------------------------------------------------
 Predicate Information (identified by operation id):
 ---------------------------------------------------
    1 - filter("ENAME"='SCOTT')
    2 - filter("ENAME"='SCOTT')
    4 - access("MGR"=NULL)
 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.2万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号