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…...
企业电子招投标系统源码之了解电子招标投标全流程
随着各级政府部门的大力推进,以及国内互联网的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同࿰…...
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系统用于排版…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
