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

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...