当前位置: 首页 > news >正文

Oracle 之表的连接类型——舞蹈跳出

  • 嵌套循环(Nested Loops Join)
    • Oracle 中最基本的连接方法,用于处理数据表之间的连接操作。
    • 嵌套循环是通过对其中一个表(外部表)进行全循环操作,然后针对每条记录在另一张表(内部表)中查找相应的匹配记录,将匹配结果组合后返回。
    • 嵌套循环连接主要用于查询较小的数据集。当数据集较小时,嵌套循环连接性能较好。
    • 优点
      • 实现简单,易于理解。
      • 当表的数据量较小且访问速度较快时,性能不错。
      • 适用于交互式、实时系统以及对访问速度要求高的应用场景。
    • 缺点
      • 如果数据量较大,嵌套循环连接可能导致性能问题,特别是当 oracle 执行计划选择了错误的内外表顺序时。
      • 如果内外表顺序选择不当,可能导致大量的 I/O 操作,降低查询速度。通常来说,应该选择较小的表作为外部表。
    • 优化点
      • 对于嵌套循环连接,主要优化方法是尽量确保驱动表(outer table)的 size 更小,这样可以减少内表的访问次数。
      • 使用索引查找内部表,特别是内部表数据量较大时,可以大大提高查询速度。
      • 在多表连接时,应遵循最小驱动表原则,即尽量优先执行产生较小结果集的连接操作,避免不必要的连接操作。
    • 总结
      • 嵌套循环(Nested Loops Join)是 Oracle 数据库中基本的表连接操作方法,主要适用于处理较小数据集的查询。在使用和优化过程中,注意选择合适的内外表顺序,合理利用索引等方式,可以提高查询速度。
  • 哈希连接(Hash Join)
    • Oracle 数据库中一种用于执行连接操作的高效方法。
    • 当对两个表执行连接操作(如 INNER JOIN、OUTER JOIN 等)时,系统需要找到这两个表中满足连接条件的数据行。
    • 哈希连接使用哈希表数据结构来实现这一目标,使得表之间的连接操作更加快速高效。
    • 主要步骤
      • 从较小的表(称为构建输入或外部表)中读取所有满足条件的数据行,并根据其连接键生成哈希表。
      • 从较大的表(称为查询输入或内部表)中读取数据行,并根据其连接键来检索哈希表。
      • 如果内部表的数据行在哈希表中找到了匹配,则连接操作成功,输出结果集。
    • 优点
      • 高性能:哈希连接算法尤其适合处理大型表的连接操作。它避免了传统嵌套循环连接中每次查询都需要进行大量的I/O操作,从而减少了查询时间。
      • 操作简化:哈希连接不需要预先排序输入表,因此减少了排序带来的性能开销。
      • 自适应性:哈希连接算法在构建哈希表时可以自动调整内存使用,以更有效地利用系统资源。
    • 缺点
      • 哈希连接的性能也受到内存限制。如果哈希表过大而导致内存不足时,哈希连接可能会遇到性能下降的问题。
    • 优化
      • 通常需要针对特定查询调整内存配置,为哈希表分配足够的内存空间。
    • 总结
      • 哈希连接是 Oracle 数据库中一种高效的连接方法,具有高性能、简化操作和自适应性等特点。适当配置内存资源可以使哈希连接在处理大型表连接操作时发挥更大的优势。
  • 排序合并(Merge Sort Join)
    • Oracle数据库中十分重要的一种占用连接操作,用于组合来自两个或多个输入源(通常是两个表或查询结果集)的数据,根据相同的键值(即通过给定条件的匹配行)对数据进行连接。
    • 排序合并连接在处理大量数据时具有较好的性能,适合各种类型的连接操作(例如,内连接、外连接等)。
    • 优点
      • 处理大量数据:排序合并连接可以高效地处理大量数据,这是因为在连接过程中,输入源会根据连接键被排序。因此,整个连接过程可以按照顺序进行。
      • 高度可扩展:排序合并连接可以并行地处理多个输入源,这意味着可以将多个计算资源(例如CPU核心)用于同时处理连接操作。这使得排序合并连接在处理大量数据时能够提高性能。
      • 适合各种类型的连接操作:排序合并连接不仅适用于内连接,还适用于外连接(如左连接、右连接等),使得该方法更具通用性。
    • 缺点
      • 当连接的表较大时,Merge Sort Join 的 IO 消耗较大,因此应尽量减少不必要的排序操作,如避免不必要的 ORDER BY 语句。
    • 操作过程
      • 输入源按连接键进行排序:在排序合并连接的开始阶段,首先对输入源根据连接键进行排序。这使得后续连接过程更加高效,避免了在每次连接时都需要重新搜索输入源的麻烦。
      • 比较和连接:排序后,从每个输入源的第一行开始,将连接键值进行比较。如果连接键相同,则将这两行连接在一起,并将结果行添加到输出结果集中。接着,继续处理每个输入源的下一行。如果一个输入源的当前行连接键小于另一个输入源的当前行连接键,则跳过较小的输入源的当前行,继续处理其下一行。
      • 快速过滤不匹配数据:通过比较已排序的连接键,排序合并连接可以快速跳过那些无法匹配的行。这使得整个连接过程更加高效,只需对匹配的行进行处理。
    • 优化
      • Merge Sort Join 对内存使用较为敏感,需要合理配置 SORT_AREA_SIZE 参数来优化性能。
    • 总结
      • 排序合并(Merge Sort Join)是Oracle数据库中的一种连接操作,用于将来自不同输入源的数据根据相同的键值进行连接。它具有处理大量数据的能力,高度可扩展性以及适用于各种类型的连接操作的特点。排序合并连接首先对输入源进行排序,然后通过比较和连接来生成结果集。这种方法可以有效地提高处理大量数据时的性能。
  • 在电信、金融等领域的数据库相关应用中,表连接总体的比例情况大致为,Nested Loops Join 占70% ,Hash Join 占20%,Merge Sort Join 占10%

此文章为个人的笔记,如有写的不对或你对这方面还有什么高见,欢迎评论,评论区见。

http://www.lryc.cn/news/60337.html

相关文章:

  • 深入浅出JS定时器:从setTimeout到setInterval
  • CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结
  • 企业电子招投标系统源码之了解电子招标投标全流程
  • SpringCloud之Gateway组件简介
  • GoNote第三章 主流框架加对比
  • Quartz框架详解分析
  • Nginx专题-基于多网卡的主机配置
  • 4.2和4.3、MAC地址、IP地址、端口
  • 放弃 console.log 吧!用 Debugger 你能读懂各种源码
  • epoll机制解析
  • 基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目
  • 我们为什么要写作?
  • 设计模式:创建者模式 - 建造者模式
  • String a = new String(“abc“); 创建了几个对象?String a = “abc“; 呢?
  • keepalived+nginx安装
  • 硬盘格式化工具,强烈推荐这个!
  • Python的异常捕获和处理
  • oracle学习之rownum和rowid
  • 为什么说过早优化是万恶之源?
  • 如何用 ModelScope 实现 “AI 换脸” 视频
  • 怎么样成为一名Python工程师?到底要会哪些东西?你会了多少?
  • 项目前期1.0
  • MySQL语句执行耗时分析
  • FVM链的Themis Pro(0x,f4) 5日IDO超百万美元,领Filecoin重回高点
  • 【PMP】优秀的项目经理如何做好范围管理?
  • 【Linux】 密码相关。pwconv
  • 揭秘阿里新大招:大模型只是前菜
  • 【U8+】win10/11系统注册用友U8硬加密
  • SQL Server 服务器安装配置和使用
  • Spring常见面试题汇总