热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle执行计划中NESTEDLOOPSSEMI(即半嵌套循环)的解释

在存在in的子查询的SQL语句和存在EXISTS的相关子查询的SQL语句的执行计划里,有NESTEDLOOPSSEMI(即半嵌套循环)。所谓的NESTEDLOOPSSEMI(即半嵌套循环),就是theoutquerystopsevaluating(评价,求…的数)theresultsetofthe

在存在in的 子查询的 SQL语句和存在 EXISTS 的相关子查询的 SQL语句 的执行计划里,有NESTED LOOPS SEMI (即半嵌套循环)。 所谓的 NESTED LOOPS SEMI (即半嵌套循环) ,就是 the out query stops evaluating (评价, 求…的数 )the result set of the

在存在in的子查询的SQL语句和存在EXISTS的相关子查询的SQL语句的执行计划里,有NESTED LOOPS SEMI (即半嵌套循环)。

所谓的NESTED LOOPS SEMI (即半嵌套循环),就是

the out query stops evaluating (评价,求…的数值)the result set of the inner query when the first value is found。

也就是说,一旦子查询的第一条结果出来,主查询(里的表的当前行)就停止子查询的继续进行执行。


NESTED LOOPS SEMI (即半嵌套循环)执行过程的伪代码如下:

  1. open tab1 (主查询里的表
  2. while tab1 still has records
  3. fetch one record from tab1
  4. (并且) result = false (即将变量result的值置为alse
  5. open tab2
  6. while tab2 still has records
  7. fetch one record from tab2
  8. if(根据tab1.record 和 tab2.record的值执行一次子查询语句所得的结果集不为空) then
  9. result = true
  10. (并且)exit loop2
  11. end if
  12. end loop2
  13. close tab2
  14. if (result = true) return tab1 record
  15. end loop1
  16. close tab1
注释:

  • fetch one record from tab1
  • result = false (即将变量result的值置为alse
  • open tab2
  • 这三条语句是并列的关系


  • result = true
  • exit loop2
  • 这两条语句是并列的关系


    在存在in的SQL语句的执行计划里的NESTED LOOPS SEMI (即半嵌套循环):


    [html] view plaincopy

    1. gyj@MYDB> set autot traceonly;
    2. gyj@MYDB> select * from t4 where id in (select id from t3);
    3. 9 rows selected.
    4. Execution Plan
    5. ----------------------------------------------------------
    6. Plan hash value: 1092212754
    7. -----------------------------------------------------------------------------
    8. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    9. -----------------------------------------------------------------------------
    10. | 0 | SELECT STATEMENT | | 9 | 99 | 21 (0)| 00:00:01 |
    11. | 1 | NESTED LOOPS SEMI | | 9 | 99 | 21 (0)| 00:00:01 |
    12. | 2 | TABLE ACCESS FULL| T4 | 9 | 54 | 3 (0)| 00:00:01 |
    13. |* 3 | INDEX RANGE SCAN | IDX_T3 | 999K| 4882K| 2 (0)| 00:00:01 |
    14. -----------------------------------------------------------------------------
    15. Predicate Information (identified by operation id):
    16. ---------------------------------------------------
    17. 3 - access("ID"="ID")
    18. Statistics
    19. ----------------------------------------------------------
    20. 1 recursive calls
    21. 0 db block gets
    22. 20 consistent gets
    23. 0 physical reads
    24. 0 redo size
    25. 723 bytes sent via SQL*Net to client
    26. 520 bytes received via SQL*Net from client
    27. 2 SQL*Net roundtrips to/from client
    28. 0 sorts (memory)
    29. 0 sorts (disk)
    30. 9 rows processed



    存在EXISTS的相关子查询的SQL语句的执行计划里的NESTED LOOPS SEMI (即半嵌套循环)


    [html] view plaincopy

    1. open tab1
    2. while tab1 still has records
    3. fetch record from tab1
    4. result = false
    5. open tab2
    6. while tab2 still has records
    7. fetch record from tab2
    8. if(tab1.record matches tab2.record) then
    9. result = true
    10. exit loop
    11. end if
    12. end loop
    13. close tab2
    14. if (result = true) return tab1 record
    15. end loop
    16. close tab1

    注释:

    1#

  • EXISTS谓词非常简单,它是对一个非空集的测试。如果在其子查询中存在任何行,则返回TRUE,否则为FALSE。该谓词不会返回UNKNOWN结果。EXIST()谓词语法如下: ::=[NOTEXISTS]<表子查询>

    2#

  • 执行计划中,若一个父操作有两条并列的子操作时,其执行模式之一是:

    第一条子操作都是先执行,其影响下一条并列的子操作执行,也就是说第一条子操作遍历一遍表A后父操作才算结束,当该子操作遍历一行表A上的数据时,另一个子操作就会遍历一遍表B。例如,

    1. | 1 | NESTED LOOPS SEMI | | 9 | 99 | 21 (0)| 00:00:01 |
    2. | 2 | TABLE ACCESS FULL| T4 | 9 | 54 | 3 (0)| 00:00:01 |
    3. |* 3 | INDEX RANGE SCAN | IDX_T3 | 999K| 4882K| 2 (0)| 00:00:01 |
    源自:关于嵌套查询(nested query)的深入理解

    参见:

    [每日一题] OCP1z0-047 :2013-08-08 相关子查询中EXISTS的使用.....................................28




  • 推荐阅读
    • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • Oracle Database 10g许可授予信息及高级功能详解
      本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
    • 高质量SQL书写的30条建议
      本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
    • 错误:requireluasql.mysqlstdin:1:moduleluasql.mysqlnotfound:nofieldpackage.preload[lua ... [详细]
    • 1、概念解读1.1什么是链接?链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的方法。Linux系统中有两种链接:硬链接(HardLink)和软链接(SoftLink), ... [详细]
    • php还能用多少年(php还行吗)
      导读:很多朋友问到关于php还能用多少年的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
    • 微软头条实习生分享深度学习自学指南
      本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
    • 如何自行分析定位SAP BSP错误
      The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
    • Nginx使用AWStats日志分析的步骤及注意事项
      本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
    • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
      本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
    • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
      Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
    author-avatar
    娜丷衣阵风丶
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有