当前位置: 首页 > 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%

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

相关文章:

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

嵌套循环(Nested Loops Join) Oracle 中最基本的连接方法,用于处理数据表之间的连接操作。 嵌套循环是通过对其中一个表(外部表)进行全循环操作,然后针对每条记录在另一张表(内部表)…...

深入浅出JS定时器:从setTimeout到setInterval

前言 当谈到 JavaScript 编程语言最基本的概念时,定时器就是一个必须掌握的知识点。在编写网站时,你经常会遇到需要在一定时间间隔内执行一些代码的情况。这时候,JavaScript 定时器就可以派上用场了。 什么是定时器? JS 定时器是…...

CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结

文章目录 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结一、CountDownLatch二、CyclicBarrier三、Semaphore总结 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中,有三种常见的同步工具类:CountDownL…...

企业电子招投标系统源码之了解电子招标投标全流程

随着各级政府部门的大力推进,以及国内互联网的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…...

SpringCloud之Gateway组件简介

网关的理解 网关类似于海关或者大门,出入都需要经过这个网关。别人不经过这个网关,永远也看不到里面的东西。可以在网关进行条件过滤,比如大门只有对应的钥匙才能入内。网关和大门一样,永远暴露在最外面 不使用网关 前端需要记住每…...

GoNote第三章 主流框架加对比

GoNote第三章 主流框架加对比 Golang主流框架介绍 自从面市以来,Golang成为了程序员在编写API和开发Web服务时的首选之一。近90%的受访者表示会在自己下一组项目中持续使用Golang。与我们熟悉的C和C类似,Go语言也是现有Golang的“灵魂”。而Golang则是…...

Quartz框架详解分析

文章目录 1 Quartz框架1.1 入门demo1.2 Job 讲解1.2.1 Job简介1.2.2 Job 并发1.2.3 Job 异常1.2.4 Job 中断 1.3 Trigger 触发器1.3.1 SimpleTrigger1.3.2 CornTrigger 1.4 Listener监听器1.5 Jdbc store1.5.1 简介1.5.2 添加pom依赖1.5.3 建表SQL1.5.4 配置文件quartz.propert…...

Nginx专题-基于多网卡的主机配置

文章目录 Nginx 基于多网卡的主机实现一、虚拟机前置环境准备ifcfg-ens32配置文件的内容参考ifcfg-ens33配置文件的内容 二、案例演示修改nginx.conf配置文件解决中文乱码 Nginx 基于多网卡的主机实现 一、虚拟机前置环境准备 点击虚拟机右下角的 红色标框按钮,然后…...

4.2和4.3、MAC地址、IP地址、端口

计算机网络等相关知识可以去小林coding进行巩固(点击前往) 4.2和4.3、MAC地址、IP地址、端口 1.MAC地址的简介2.IP地址①IP地址简介②IP地址编址方式③A类IP地址④B类IP地址⑤C类IP地址⑥D类IP地址⑧子网掩码 3.端口①简介②端口类型 1.MAC地址的简介 …...

放弃 console.log 吧!用 Debugger 你能读懂各种源码

很多同学不知道为什么要用 debugger 来调试,console.log 不行么? 还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢? 这篇文章就来讲一下为什么要用这些调试工具: console.lo…...

epoll机制解析

一、epoll实现原理 1、实现原理 epoll通过3个方法来实现对句柄的监控操作,要深刻理解epoll,首先得了解epoll的三大关键要素:mmap、红黑树、链表。下面是epoll的框架图,如下: mmap epoll是通过内核与用户空间mmap同一块…...

基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目

今天给小伙伴们分享一个基于 SpringBoot Vue 实现的可视化拖拽编辑的大屏项目; 一、简介 这个是一个开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。 多数据源支持,内置mysql、el…...

我们为什么要写作?

为什么要写书是一个很难回答的问题,因为从不同的角度,会有不同的答案。 最近ChatGPT很火!诸事不决,先问问ChatGPT,看看它是怎么回答的。 ChatGPT给出的答案还是比较全,虽然没有“一本正经的胡说八道”&…...

设计模式:创建者模式 - 建造者模式

文章目录 1.概述2.结构3.实例4.优缺点5.使用场景6.模式扩展 1.概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某…...

String a = new String(“abc“); 创建了几个对象?String a = “abc“; 呢?

String a new String(“abc”); 创建了几个对象?String a “abc”; 呢? 答案:String a new String(“abc”); 创建了1个或2个对象;String a “abc”; 创建了0个或1个都对象 String a new String(“abc”); 创建过程 首先在…...

keepalived+nginx安装

欢迎使用ShowDoc! 1、安装基础包: yum -y install libnl libnl-devel 2、上传包: tar -zxvf keepalived-2.0.20.tar.gz -C /data/imas/base_soft mkdir -p /data/imas/base_soft/keepalived cd /data/imas/base_soft/keepalived-2.0.20 .…...

硬盘格式化工具,强烈推荐这个!

案例:硬盘格式化工具推荐 【我的电脑已经用了好几年了,硬盘存储容量严重不够了,最近想把它格式化,但却不知道怎么操作,大家有什么比较好的硬盘格式化工具可以推荐吗?】 硬盘作为存储设备,我们…...

Python的异常捕获和处理

程序在运行过程当中,不可避免的会出现一些错误,比如:使用了没有赋值过的变量,使用了不存在的索引,一个数字除以0 …… 这些错误在程序中,我们称其为异常。 程序运行过程中,一旦出现异常将会导致…...

oracle学习之rownum和rowid

rownum先百度一波https://www.cnblogs.com/xfeiyun/p/16355165.html rownum是oracle特有的一个关键字。 对于基表,在insert记录时,oracle就按照insert的顺序,将rownum分配给每一行记录,因此在select一个基表的时候,r…...

为什么说过早优化是万恶之源?

Donald Knuth(高德纳)是一位计算机科学界的著名学者和计算机程序设计的先驱之一。他被誉为计算机科学的“圣经”《计算机程序设计艺术》的作者,提出了著名的“大O符号”来描述算法的时间复杂度和空间复杂度,开发了TeX系统用于排版…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...