`

oracle表联结方法

 
阅读更多

     联结的方法有:嵌套循环联结、散列联结、排序-合并联结、笛卡儿积联结。每种联结方法都有一定的最适合使用的条件,对于每对需要联结的表,优化器还必须确定表联结的顺序。

 

  • 嵌套循环联结(NESTED LOOPS)

 

      嵌套循环联结使用一次访问运算所得到的结果集中每一行来与另一个表进行对碰。如果结果集的大小是有限的,并且在用来联结的列上建有索引的话,这种联结的效率通常是最高的。嵌套循环联结的运算成本主要是读取外层表中的每一行并将其与所匹配的内层表中的行联结所需的成本。

 

顾名思义,嵌套循环联结就是一个循环嵌套在另一个循环当中。外层循环基本来说就是一个只使用WHERE子句中的属于驱动表的条件对它进行的查询。当数据行经过了外层条件筛选并被确认匹配条件后,这些行就会逐个进入到内层循环中。然后再基于联结列进行逐行检查看是否与被联结的表中的某一行相匹配。如果这一行与第二次的检查相匹配,就将会被传递到查询计划的下一步或者如果没有更多步骤的话直接被包含在最终的结果集中。这种类型的强大之处在于所使用的内存是非常少的 。在结果集较少的时候会是最好的。NESTED LOOPS运算后所列出的第一个表是驱动表。

 

  • 排序-合并联结(SORT JOIN MERGE JOIN)

 

      排序-合并联结独立地读取需要联结的两张表,对每张表中的数据行按照联结键进行排序,然后对排序后的数据行集进行行合并。对这种联结方法来说排序的开销是非常大的。对于不能够放入内存中的大的数据源来说,可能会使用临时磁盘空间来完成排序。这是非常耗占内存和时间资源的。但是一但数据行集排序完成了,合并的过程是非常快的。为了进行合并,数据库轮流操作两个表,经较最上面的数据行,丢弃在排序队列中比另一列表中的最上面一行出现得早的数据行,并只返回匹配的行。

 

  • 散列联结(HASH JOIN)

 

     散列联结,与排序-合并联结类似,首先应用WHERE子句中的筛选标准来独立地读取要进行联结的两个表。基于表和索引的统计信息,被确定为返回最少行数的表被完全散列化到内存中。这个散列表包含了原表的所有数据行并被基于将联结键转化为散列值的随机函数载入到散列桶中。只要有足够的内存空间,这个散列表将一直放在内存中。然而,如果没有足够的内存,散列表将会被写入到临时磁盘空间。

 

     下一步就是读取另一张较大的表并对联结键列应用散列函数。然后利用得到的散列值,对较小的在内存中的散列表进行探测以寻找匹配的第一个表的行数据所在的散列桶。每个散列桶都有一个放在其中的数据行列表(通过一个位图来表示)。这个列表被用来与探测行进行匹配。如果匹配成功,则返回这一行数据,否则丢弃。较大的表只读取一次,并检查其中的每一行来寻找匹配。这与嵌套循环联结的不同之处在于,此处内层表被多次读取。因此较大的表是驱动表,仅读取一次,而较小的散列表则被探测很多次。与嵌套回路联结执行计划不同,在执行计划的输出中较小的散列表放在前面而较大的探测表放在后面。

 

  • 笛卡尔积联结(MERGE JOIN CARTESIAN)

 

      笛卡尔联结发生在当一张表中的所有行与另一张表中的所有行联结的时候。因此,这种联结所得到的结果集的部行数等于一张表(A)中的数据行数乘以另一张表(B)中的数据行数,也就是A*B=结果集中总的数据行数。

 

  • 外联结(NESTED LOOPS OUTER)

 

      外联结返回一张表的所有行以及另一张表中满足联结条件的行数据。ORACLE使用+字符来表明进行外联结。+号放在一对圆括号中,位于只有匹配才会返回数据行的表联结旁。正如在对种联结方法进行总述的时候指出的,外联结需要外联结表作为驱动表。这意味着有可能不能选用更加优化的联结执行顺序。因此,使用外联结的时候需要格外小心,因为它的选用有可能会影响到整个执行计划的性能。

 

     小结:在确定SQL语句的执行计划的时候,优化器必须做出几个关键的选择。首先,要确定查询中所用的每个表最合适的访问方法。基本上有两种选择:索引扫描全表扫描 。每种访问方法用来访问包含SQL语句所需数据的实现方式是不同的。一旦优化器选定了访问方法,就必须选定联结方法。表将会被逐对进行联结,前一次联结的结果的数据行被用来与下一个表进行联结,直到所有表都被联结并获得最终的结果集。理解每种访问和联结方法是如何实现,有助于你写出可以让优化器作出最高效选择的SQL。理解所选的运算以及这些运算是如何进行,也将助于你来避免最容易发生性能问题的地方。理解表之下的内部原理,可以帮助你写出更好、更快的SQL语句。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    oracle高级编程-联结代码分析

    此代码是在查看Oracle sql 高级编程时的代码分析的脚本。是第三章第三节

    linux安装oracle图形界面乱码问题.docx

    解决方法是将语言环境设置为英文环境,然后重新安装 Oracle 数据库。 在 Linux 操作系统中,可以使用 export 命令来设置语言环境,例如: $ export LANG=en_US $ export LC_ALL=en_US 二、Oracle 安装包的语言环境...

    浅谈Oracle数据库性能的优化

    1. **选择合适的联结类型**:根据表之间的关系和数据分布情况选择最合适的联结类型,如内联结(INNER JOIN)、外联结(OUTER JOIN)等。 2. **使用适当的索引**:确保参与联结的字段上有合适的索引,以便快速定位...

    Oracle中的半联结和反联结详解

    在Oracle数据库中,半联结(Semi-Join)和反联结(Anti-Join)是两种特殊的查询操作,它们通常用于处理两个表之间的关联,但返回的结果与传统的内联结(Inner Join)和外联结(Outer Join)有所不同。这两种操作在...

    Oracle SQL高级编程

    第3章 访问和联结方法 55 第4章 SQL是关于集合的 95 第5章 关于问题 116 第6章 SQL执行计划 137 第7章 高级分组 170 第8章 分析函数 197 第9章 Model子句 225 第10章 子查询因子化 254 第11章 半联结和反联结 292 第...

    Oracle经典教程(入门到精通很详细)

    此外,Oracle提供了工具和方法来进行数据库的导入导出操作,如EXP和IMP工具,它们分别用于导出和导入数据,对于数据迁移和备份恢复等场景尤为关键。 总的来说,Oracle数据库是一个功能强大且复杂的系统,它拥有众多...

    Oracle中优化SQL查询方法的探讨.pdf

    本文从减少剖析Oracle SQL表达式的时间和优化SQL语句执行过程两个角度出发,探讨了提高Oracle数据库性能的多种方法。 首先,关于减少剖析Oracle SQL表达式的时间,主要涉及了三种技术方法。第一种方法是使用ordered...

    oracle学习心得.doc

    Oracle 学习心得是一个专业的数据库管理系统,具有可移植性、可联结性等特点。它的总体构造包括文件构造、内存构造和进程构造。文件构造包括五类文件:代码文件、数据文件、日志文件、控制文件和参数文件。内存构造...

    ORACLE数据库学习心得.doc

    此外,Oracle还提供了读取其他非Oracle数据库文件的方法,进一步增强了其与其他系统的集成能力。 3. **可联结性**:对于不同的通信协议、不同的硬件平台以及不同的操作系统组成的网络环境,Oracle同样能够顺畅运行...

    韩顺平Oracle教学笔记.docx

    韩顺平Oracle数据库教程笔记涵盖了Oracle数据库的基础知识和高级技术,涵盖了数据类型、查询语句、条件语句、排序语句、分组语句、联结语句、子查询、数据操作、视图、索引、存储过程、触发器、数据库设计、数据库...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 3.1.4 全扫描与高水位线 60 3.2 索引扫描访问方法 65 3.2.1 索引结构 66 ...

    Oracle数据库培训.ppt

    模式对象是 Oracle 数据库中的数据库对象的集合,包括表、视图、序列、存储过程、索引、聚簇、同义词、数据库联结等。 数据块是 Oracle 数据库中的基本存储单元,用于存储数据。范围段是 Oracle 数据库中的逻辑存储...

    超详细Oracle教程.pdf

    5. 多表查询:介绍了在Oracle中如何进行多表联结、子查询等复杂的查询操作,以及数据的整合。 6. 高级查询:讲解了Oracle中的高级查询技巧,例如使用分析函数等。 7. 数据字典:解释了Oracle数据字典的作用及其...

    Oracle sql 高级编程(包含书中sql 附件)

    所涵盖的内容涉及SQL核心、SQL执行、分析函数、联结、测试与质量保证等,并提供大量实用性建议,且总结出方方面面的“技巧”帮助读者在阅读过程中快速消化所看内容。 《Oracle SQL高级编程/数据库系列》适合软件研发...

    《精通Oracle SQL 第2版》 PDF

    书中主要介绍了如何掌握在Oracle数据库中实现的强大SQL特性,所涵盖的内容涉及SQL核心、SQL执行、分析函数、联结、测试与质量保证等,并提供了大量实用的建议,总结出方方面面的“技巧”,帮助读者快速消化重要知识...

    Oracle性能优化指南

    SQL优化一般包括重写低效的SQL语句、使用索引来加速查询、避免全表扫描、合理使用联结(JOIN)操作等。 4. 存储优化:存储系统的选择和配置直接影响数据的读写速度。可以采用RAID技术提高数据的安全性和读写性能,...

    oracle parallel SQL

    如果在没有并行查询选项的情况下执行,一个进程将负责获取 CUSTOMERS 表中的所有行。相同的进程还要负责对这些行进行排序,以满足ORDER BY的要求。如果使用了并行查询,就可以通过分配多个进程来同时处理这些数据,...

Global site tag (gtag.js) - Google Analytics