Oracle Join 内部实现区别

Oracle HASH JOIN 引起的TEMP爆满分析总结 一次不合理的left join 导致的TEMP爆满的经历 阅读详情

基本概念

Nested loop join:

Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环。

Sort merge join:

将两个表排序,然后再进行join。

Hash join:

将两个表中较小的一个在内存中构造一个Hash 表(对Join Key),扫描另一个表,同样对Join Key进行Hash后探测是否可以join,找出与之匹配的行。

一张小表被hash在内存中。因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据被放置在临时表空间中;

每读取大表的一条记录,就和小表中内存中的数据进行比较,如果符合,则立即输出数据(也就是说没有读取临时表空间中的小表的数据)。而如果大表的数据与小表中临时表空间的数据相符合,则不直接输出,而是也被存储临时表空间中。

当大表的所有数据都读取完毕,将临时表空间中的数据以其输出。如果小表的数据量足够小(小于hash area size),那所有数据就都在内存中了,可以避免对临时表空间的读写。

如果是并行环境下,前面中的第2步就变成如下了:每读取一条大表的记录,和内存中小表的数据比较,如果符合先做join,而不直接输出,直到整张大表数据读取完毕。如果内存足够,Join好的数据就保存在内存中。否则,就保存在临时表空间中。

适用范围

Nested loop join:

适用于outer table(有的地方叫Master table)的记录集比较少(<10000)而且inner table(有的地方叫Detail table)索引选择性较好的情况下(inner table要有index)。

inner table被outer table驱动,outer table返回的每一行都要在inner table中检索到与之匹配的行。当然也可以用ORDERED 提示来改变CBO默认的驱动表,使用USE_NL(table_name1 table_name2)可是强制CBO 执行嵌套循环连接。

cost  = outer access cost + (inner access cost * outer cardinality)

Sort merge join:

用在数据没有索引但是已经排序的情况下。

通常情况下hash join的效果都比Sort merge join要好,然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时Sort merge join的性能会优于hash join。可以使用USE_MERGE(table_name1 table_name2)来强制使用Sort merge join。
cost = (outer access cost * # of hash partitions) + inner access cost

Hash join:

适用于两个表的数据量差别很大。但需要注意的是:如果HASH表太大,无法一次构造在内存中,则分成若干个partition,写入磁盘的temporary segment,则会多一个I/O的代价,会降低效率,此时需要有较大的temporary segment从而尽量提高I/O的性能。

可以用USE_HASH(table_name1 table_name2)提示来强制使用散列连接。如果使用散列连HASH_AREA_SIZE 初始化参数必须足够的大,如果是9i,Oracle建议使用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY 为AUTO,然后调整PGA_AGGREGATE_TARGET 即可。

也可以使用HASH_JOIN_ENABLED=FALSE(默认为TRUE)强制不使用hash join。

cost = (outer access cost * # of hash partitions) + inner access cost

效率比较

Hash join的主要资源消耗在于CPU(在内存中创建临时的hash表,并进行hash计算),而merge join的资源消耗主要在于磁盘I/O(扫描表或索引)。在并行系统中,hash join对CPU的消耗更加明显。所以在CPU紧张时,最好限制使用hash join。

在绝大多数情况下,hash join效率比其他join方式效率更高:

在Sort-Merge Join(SMJ),两张表的数据都需要先做排序,然后做merge。因此效率相对最差;
Nested-Loop Join(NL)效率比SMJ更高。特别是当驱动表的数据量很大(集的势高)时。这样可以并行扫描内表。
Hash join效率最高,因为只要对两张表扫描一次。

干货丨数据仓库工具hive面试题集锦 大数据技术成为互联网发展的核心要素之一,想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。这些技术知识点已经成为大数据工程师,进入职场时面试中必备的考点。今天,和大家分享一些数据仓库工具hive相关的面试题!有3种join方式:① 在 reduce 端进行 join,最常用的 join 方式。Map端的主要工作:为来自不同表(文件)的 key/value 对打标签以区别不同来源的记录。 阅读详情

相关推荐

数据仓库工具hive面试题集锦

③ SemiJoin,semijoin 就是左边连接是 reducejoin 的一种变种,在 map 端过滤掉一些数据,在网络传输过程中,只传输参与连接的数据,减少了 shuffle的网络传输量,其他和 reduce的思想是一样的。建表时会在 hdfs 创建一个表的存储目录,增加分区的时候,会将数据复制到此location下,删除数据的时候,将表的数据和元数据一起删除。一般会建立分区,增加分区的时候不会将数据移到此表的 location下,删除数据的时候,只删除了表的元数据信息,表的数据不会删除。

Blue92120的博客 900

谈Oracle中的三种Join方法

转自:http://database.51cto.com/art/200905/122793.htm 摘要:这里将为大家介绍Oracle中的三种Join方法,Nested loop join、Sort merge join和Hash join。整理出来以便帮助大家学习。 标签:Oracle Join 查询 Oracle帮您准确洞察各个物流环节 基本概念 Nested ...

qinglin876 226

FFTW多核优化避坑指南:从交叉编译到ELF2板载OpenMP部署全流程

本文详细介绍了在ELF2开发板(RK3588平台)上为FFTW库配置OpenMP多核并行的完整流程与避坑指南。内容涵盖从交叉编译、库依赖处理到板载部署的实战步骤,并深入分析了RK3588的big.LITTLE架构对线程调优的影响,帮助开发者在嵌入式环境中高效利用多核性能。

2a4s6d8f0g的博客 271

Oracle 的四种连接-左外连接、右外连接、内连接、全外连接

http://www.cnblogs.com/hehaiyang/p/4745897.html

luke_wang的专栏 1499

ArcGIS Enterprise10.9.1的Windows安装部署

ArcGIS Enterprise10.9.1中Windows版本安装介绍。

qq_36250702的博客 2446

STM32H743 ADC多通道采样实战:CubeMX配置+DMA传输避坑指南

本文详细介绍了STM32H743 ADC多通道采样的实战配置,包括CubeMX参数设置、DMA传输优化及常见问题解决方案。重点解析了ADC模块的核心特性、多通道采样序列配置、Cache一致性处理等关键技术,帮助开发者高效实现稳定可靠的模拟信号采集系统。

weixin_29175469的博客 611

oracle数据库 delete join使用

用left join写delete from users_branch LEFT JOIN users ON users_branch.users_branch_id =users.user_id IN( SELECT user_id FROM users where role_channel IN ('TSM','KAM' ,'MAM') and role_desc IN ('BIS','BF...

NULL 8654

给硬件工程师的UCIe软件配置入门:从寄存器表到实战调试,一篇讲透

本文为硬件工程师提供UCIe软件配置的全面指南,从寄存器表解析到实战调试技巧,涵盖链路训练、错误排查等关键环节。通过详细代码示例和分层诊断法,帮助工程师快速掌握UCIe寄存器访问机制,提升异构集成开发效率。

weixin_30268921的博客 313

oracle join连接

在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图、物化视图等联结)。SQL JOIN其实是一个逻辑概念,像NEST LOOP JOIN、 HASH JOIN等是表连接的物理实现方式。注:文字描述参考:https://blog.youkuaiyun.com/zhanglongfei_test/article/details/122563033,测试采用oracle自带的scott表inner join 表示返回俩个表或记录连接字段的匹配记录。它有三种实现方式。

windandsnowlove的博客 1033

从零开始:如何用大语言模型构建你的第一个路径规划智能体

本文详细介绍了如何利用大语言模型(LLM)构建路径规划智能体,从基础概念到实战案例,涵盖TSP和CVRP问题的解决方案。通过选择合适的LLM模型、设计有效的提示工程和实现自我验证,即使没有运筹学背景也能快速上手。文章还提供了部署与优化智能体的实用技巧,帮助读者在物流配送、机器人导航等领域应用这一技术。

weixin_28256233的博客 487

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 481

oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...

是新朋友吗?记得先点蓝字关注我哦~ 今日课程菜单Java全栈开发 |Web前端+H5大数据开发 | 数据分析人工智能+Python | 人工智能+物联网进入数据时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代表。想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。而且这些技术知识点已经成...

weixin_39805998的博客 124

基于XGBoost的混凝土力学性能预测系统

本文介绍了一个基于XGBoost算法的混凝土力学性能预测系统。该系统通过模拟生成3000组混凝土配合比数据(包含水灰比、水泥用量和龄期三个关键特征),利用XGBoost强大的非线性建模能力预测混凝土抗压强度。研究背景源于传统混凝土性能测试方法耗时耗力的痛点,该系统可显著减少实验次数,优化配合比设计。系统实现包括:数据生成与特征工程(模拟真实工程数据并添加噪声和异常值)、XGBoost模型构建、以及预测性能评估。XGBoost算法因其处理非线性关系能力强、鲁棒性好等优势被选用,可为智能建造和数字化施工提供技术

huanghm88的专栏 129

Oracle表连接之哈希连接

Oracle Hash join 是一种非常高效的join 算法,主要以CPU(hash计算)和内存空间(创建hash table)为代价获得最大的效率。Hash join一般用于大表和小表之间的连接,我们将小表构建到内存中,称为Hash cluster,大表称为probe表。   当两个表做hash join时,oracle会选择一个表作为驱动表,先根据过滤条件排除不必要的数据,然后...

miki西游 不积跬步,无以至千里;不积小流,无以成江海 567

【GameFramework框架内置模块】1、全局配置(Config)

这是GameFramework框架内置模块的第一篇,全局配置Config,讲解这些模块的时候会尽量的涉及介绍、为什么使用、如何使用、代码分析这几块,让大家可以知其然,也知其所以然。全局配置表,存储了一些游戏中使用的全局的参数配置,比如玩家的初始速度、游戏初始音量等。全局配置表的结构跟DataTable结构类似,也是列行+键值对,只是没有ID这一列,因为全局配置也不需要用ID去查询, 是直接使用key值进行查询。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5885

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hive按中文拼音排序_大数据面试题锦集 | 数据仓库工具HIVE篇

点击上方蓝色字关注我们~文末领取【MySQL练习题+答案解析】进入DATE时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代表。想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。而且这些技术知识点已经成为大数据工程师进入职场时面试中必备的考点。这里主要和大家分享一下数据仓库工具hive相关的...

weixin_39619858的博客 299

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hive 删除分区_8个Hive数据仓工具面试题锦集!

-点击上方“中国统计网”订阅我吧!-进入DATE时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代表。想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。而且这些技术知识点已经成为大数据工程师进入职场时面试中必备的考点。这里主要和大家分享一下数据仓库工具hive相关的面试题!Hive 的 j...

weixin_39812142的博客 127

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

大数据面试题知识点分析(五)

转自:https://blog.youkuaiyun.com/qq_26803795/article/details/79161599 为了保证效率和质量,每篇文章发布6个知识点,由简单及难,我们继续Hbase的尾巴,并开始HIVE: 1)怎样将mysql的数据导入到hbase中? A、一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入hbase时,会按照region...

雪泪寒的博客 270

oracle里面inner join 和left join 的区别

维度INNER JOINLEFT JOIN返回行数等于两表匹配的行数至少等于左表行数(可能更多,若右表有多条匹配)NULL 值不会产生 NULL(不匹配行已过滤)右表无匹配时全部为 NULL主表无主次之分左表是主表,全部保留典型场景需严格对应关系的数据需保留主表全部数据,补充关联信息。

juanmiao的专栏 1029

oracle知识整理(1) union和union all的区别,left join和right join的区别(各种join的区别)

union和union all的区别 UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 UNION相当于真正的关联,会进行连接+排序+去重复 UNION ALL相当于简单把结果连接起来,速度快 UNION在进行表链接后将会按照字段的顺序进行排序,会筛选掉重复的记录,Union All不会去除重复记录,也不存在排序。 所以从效率上说,...

★【World Of Moshow 郑锴】★ 4068

oracle sql outer join,解答Oracle LEFT JOIN和LEFT OUTER JOIN的区别

问:我一直在对不同种类的Oracle连接做研究,目前还搞不清楚LEFT JOIN和LEFT OUTER JOIN之间有什么区别。Outer这个词是可选的么?因为Oracle中的LEFT JOIN是默认为OUTER JOIN的。如果是这样的话,我就不明白“INNER”和“OUTER”的用法了,因为显而易见INNER与JOIN或FULL JOIN一起使用从而产生两个表中所有的匹配(对于inner也是同...

weixin_29767773的博客 1329

Oracle的left join中on和where的区别以及与(+)的区别

自从用了oracle数据库之后,基本上都是用(+)的方式来替代了left join,前几日执行一个语句发现有问题,仔细检查发现oracle的连接用法left join与 (+)的方式还是有点区别的。刚好看到了 left join的文章,遂引用如下: 外关联是Oracle数据库的专有语句 Left Outer Join则是SQL-92的标准语句 通常认为这两个SQL是可以等效的,但还是有些细微

mousever的专栏 4440

Oracle中left join,right join,inner join分析

在开始分析之前,我们先准备一些测试数据。首先,初始化三张表,分别为test_user,test_team,test_type,建表语句如下 create table TEST_USER ( user_id NUMBER, user_name VARCHAR2(30 CHAR), user_team NUMBER, user_type VARCHAR2(30 CHAR) ); create table test_team( team_id number, team_name varcha...

qq_39999478的博客 3536

oracle join详解,inner join和left join之间的区别详解

前言关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了。需求是从数据库查数据,在前端以柱形图的形式展现出来,查到的数据按行业分组,显示每个行业的户数及户数占比,涉及到的字段有A表的用户数、总用户数和B表的行业名称。本来是不管查不查的到数据,在X轴都应该显示行业名称的,结果是X、Y轴都...

weixin_39747807的博客 3158

Oracle LEFT JOIN中ON条件与WHERE条件的区别

Oracle LEFT JOIN中ON条件与WHERE条件的区别 JOIN中的ON条件与WHERE条件是一样的,而LEFT JOIN却不一样 SQL> create table t1 as select * from scott.emp;   表已创建。   SQL> create table t2 as select * from scott.dept;   表已创建。

Laughing 3万+
上一篇: Oracle join 用法 总结
下一篇: Oracle PL/SQL
jinger_z
博客等级 码龄19年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值