当前位置: 首页 > 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系统用于排版…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...