oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...
浅谈Oracle中的三种Join方法
基本概念
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效率最高,因为只要对两张表扫描一次相关阅读:
基于jquery实现的鼠标拖拽元素复制并写入效果
JavaScript检查是否是正确的日期格式的代码
javascript之AJAX框架使用说明
6行代码实现无组件上传(author:stimson)
Oracle 中实现多表关联更新多个字段
/usr/bin/install: 无法创建一般文件‘/usr/local/man/man1/cjpeg.1’: 没有那个文件
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
使用用于SQL Server的IIS虚拟目录管理实用工具
Win7下通过组策略禁止USB接口的方法
Response 对象之Redirect方法
构建免受 FSO 威胁虚拟主机(一)
sqlserver FOR XML PATH 语句的应用
asp中文件与文件夹常用处理函数(文件后缀、创建文件等)
PHP大批量数据操作时临时调整内存与执行时间的方法
oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...相关推荐
- php中的js弹窗,浅谈javascript中的三种弹窗
js中三种弹窗 1)alert 弹出警告 无返回值---------alert('第一行\n第二行'); 2)confirm()选择确定或取消,返回t或f----var result = confir ...
- php css定位到图片上,CSS_浅谈css中图片定位之所有图标放在一张图上,如今做网页为了使网站丰富多 - phpStudy...
浅谈css中图片定位之所有图标放在一张图上 如今做网页为了使网站丰富多彩,富于表现力,往往需要应用大量的图片/图标.如何处理这些图片,使其尽量不影响网页载入,解析等速度,是一个不大不小的问题.如果你的 ...
- oracle pdb是什么意思,浅谈Oracle数据库12c PDB技术
PDB大致功能描述: 创建: 用create pluggable database的命令, 用file_name_convert的方式拷贝seed pdb的文件到对应的新pdb的路径下.拷贝的是最基本 ...
- oracle数据库加复合组件,浅谈oracle复合数据类型 (2)
二.集合 类似C语言中的数组,在ORACLE7.3及以前的版本中只有一种集合称为PL/SQL表,这种类型的集合依然保留,就是索引(INDEX_BY)表. PL/SQL有三种类型的集合a.Index_b ...
- html dom节点类型,浅谈Javascript中的12种DOM节点类型
前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...
- 三维坐标系带偏航角俯仰角_浅谈三维旋转的三种方法及差异
概述 在3D图形学中,几何变换大致分为三种:平移变换(Translation).缩放变换(Scaling).旋转变换(Rotation),而其中又以旋转变换(Rotation)最为复杂,通常旋转变换( ...
- java四种内部类区别_浅谈Java中的四种内部类
如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做 内部类 ,按照一般的分法,大致可以分为以下四类: 成员内部 ...
- workbench设置单元坐标系_浅谈Ansys中的几种坐标系
这篇简短的文章是我多年前在仿真论坛任ansys版主时发表的,时隔多年,同事正好咨询关于ansys坐标系的知识,就将此贴翻出来解他困惑,自己也重温下当年的技术贴,发给大家,希望对学习ansys的初学者有 ...
- 浅谈Zebra斑马打印机三种打印方式的利弊
经过几个项目的洗礼,对Zebra打印机有了一个初步的了解,也用了好几种方式进行通讯打印,下面我们来谈谈这几种方式的优缺点吧. 主要有以下三种方法: 1.利用ZPLII指令集编写带有位置信息,字体大小, ...
最新文章
- AI 真的会带来大规模失业吗?
- 是栈还是队列c语言实验报告怎么写,队列和栈(C语言)
- linux树形目录结构存放,Linux目录结构
- IIS网站或系统验证码不显示问题——使用了托管的处理程序,但是未安装或未完整安装 ASP.NET...
- 数据结构 5-3-3 二叉树的线索化
- 电量统计(1)-原理
- BI—SSIS初步认识
- 微型计算机系统教案,微型计算机硬件系统教案
- 怎样做终端安全防御?
- 【Tinking in Java摘录笔记】第六章 初始化和清理
- 沉浸式逆向某汽车app
- 回忆老友蒋新松先生及庆贺《机器人产业发展规划》的发布
- Vue前端如何与后端进行数据交互
- CF545C题解【贪心】
- 2020年上半年教育舆情新闻热点事件案例分析报告合集
- sublime text3 配置python、ruby、c/c++(c/c++不推荐这个方法)
- gif在html里为何会自动停止,CSS或JS实现gif动态图片的停止与播放
- 永恒python奇美拉_利用USearch去除嵌合体(chimeras)
- 第九届蓝桥杯c/c++A组省赛题解
- 程序员常见English word