Oracle中三种表连接算法的总结
1. 嵌套循环连接 (NESTED LOOP Join)
嵌套连接把要处理的数据集分为外循环(驱动数据源)和内循环(被驱动数据源),外循环只执行一次(先执行),内循环执行的次数等于外循环执行的数据集个数。
这种连接的好处是内存使用非常少。
如果驱动数据源有限,且被驱动表在连接列上有相应的索引,则这种连接方式才是高效的。
在OLTP系统上常见到这种连接方式。
2. 排序合并连接 (Sort Merge Join)
顾名思义,排序合并就是先分别对待连接的数据集进行排序,然后再合并,其执行过程大致为:对表A的数据集进行排序,排序结果保存的工作区A中;对表B的数据集进行排序,排序结果保存在工作区B中;最后合并工作区A和B中的数据。
对这种连接方法,排序的开销是非常大的,和排序工作区相关的内存参数有:sort_area_size和sort_area_retained_size,都在在PGA中。
3. 哈希连接 (Hash Join)
哈希连接处理的两个数据集分别称为构造输入(build input)和探测输入(probe input),构造输入的每行记录用于构造哈希表,探测输入的每行记录对哈希表进行探测,以找出符合连接条件的记录。
将较小的表作为构造输入,较大的表作为探测输入,这样哈希连接的效率才比较高,在执行计划中,较小的输入表在前面,较大的探测表在后面。
哈希连接只有在相等连接的条件下才能进行。
和哈希表工作区相关的内存参数有:hash_area_size,也在PGA中。
相关推荐
-
Oracle中三种表连接算法的总结
1. 嵌套循环连接 (NESTED LOOP Join)嵌套连接把要处理的数据集分为外循环(驱动数据源)和内循环(被驱动数据源),外循环只执行一次(先执行),内循环执行的次数等于外循环执行的数据集个数. 这种连接的好处是内存使用非常少.如果驱动数据源有限,且被驱动表在连接列上有相应的索引,则这种连接方式才是高效的.在OLTP系统上常见到这种连接方式. 2. 排序合并连接 (Sort Merge Join)顾名思义,排序合并就是先分别对待连接的数据集进行排序,然后再合并,其执行过程大致为:对表A的
-
使用JDBC连接ORACLE的三种URL格式
使用jdbc连接oracle时url有三种格式 格式一: Oracle JDBC Thin using an SID: jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:orcl 这种格式是最简单也是用得最多的 你的oracle的sid可以通过一下指令获得: sqlplus / as sysdba select value from v$parameter where name='instance
-
浅谈JS中的三种字符串连接方式及其性能比较
工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法 用连接符"+"把要连接的字符串连起来: str="a"; str+="b"; 毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便. 第二种方法 以数组作为中介用 join 连接字符串: var arr=new Array(); arr.push(a);
-
VMware WorkStation的三种网络连接方式详解
一. 首先贴出本人在网络上找到与VMware网络连接相关的知识 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是host网卡,用于host方式连接网络的.VMnet8是NAT网卡,用于NAT方式连接网络的.它们的IP地址是随机生成的,如果要用虚拟机做实验的话,最好将VMnet1到VMnet8的IP地址改掉.习惯上把VMware虚拟网卡使用的网段"固定",使用如下原则:VMnet1对应的网段是192.168.
-
VMware的三种网络连接方式区别
关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三种连接方式作一一说明,也方便以后翻阅当参考用. 首先,要注意安装完VMware后,控制面板\网络和 Internet\网络连接会多出两块虚拟网卡VMnet1.VMnet2,两个网卡各有用途. 基本拓扑 NAT(网络地址转换) 依靠物理主机的VMnet8网卡上网.虚拟机可以互Ping通,前提是物理主机
-
三种简单排序算法(使用java实现)
一.冒泡排序 算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端.重复操 作,直到排序完成. 示例演示: 算法实现: for(int i=0;i<array.length-1;i++){//最多排序n-1次 for(int j=0;j<array.length-i-1;j++){//需要交换的次数 if(array[j]>array[j+1]){ int temp=array[j]; array[j]
-
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Bootstrap提供了三种表单布局:垂直表单,内联表单和水平表单.下面逐一给大家介绍,有兴趣的朋友一起学习吧. 创建垂直或基本表单: •·向父 <form> 元素添加 role="form". •·把标签和控件放在一个带有 class .form-group 的 <div> 中.这是获取最佳间距所必需的. •·向所有的文本元素 <input>.<textarea> 和 <select> 添加 class .form-cont
-
Bootstrap三种表单布局的使用方法
Bootstrap提供了三种表单布局:垂直表单,内联表单和水平表单 创建垂直或基本表单: •·向父 <form> 元素添加 role="form". •·把标签和控件放在一个带有 class .form-group 的 <div> 中.这是获取最佳间距所必需的. •·向所有的文本元素 <input>.<textarea> 和 <select> 添加 class .form-control <form role=&
-
Linux Shell中三种引号的用法及区别
Linux Shell中有三种引号,分别为双引号(" ").单引号(' ')以及反引号(` `). 其中双引号对字符串中出现的$.''.`和\进行替换:单引号不进行替换,将字符串中所有字符作为普通字符输出,而反引号中字符串作为shell命令执行,并返回执行结果.具体含义如下: 双引号(" "):在双引号中,除了$, '', `和\以外所有的字符都解释成字符本身. 单引号(' '):在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符.
-
浅谈java中math类中三种取整函数的区别
math类中三大取整函数 1.ceil 2.floor 3.round 其实三种取整函数挺简单的.只要记住三个函数名翻译过来的汉语便能轻松理解三大函数,下面一一介绍 1.ceil,意思是天花板,java中叫做向上取整,大于等于该数字的最接近的整数 例: math.ceil(13.2)=14 math.ceil(-13.2)=-13 2.floor,意思是地板,java中叫做向下取整,小于等于该数字的最接近的整数 例: math.floor(13.2)=13 math.floor(-13.2)=-
随机推荐
- Lua中使用模块的一些基础知识
- 小议yxbbs漏洞利用代码
- C# 递归函数详细介绍及使用方法
- js获取元素在浏览器中的绝对位置
- JS实现的表格操作类详解(添加,删除,排序,上移,下移)
- 简单的php写入数据库类代码分享
- C语言数据结构中定位函数Index的使用方法
- 应用开发中涉及到的css和php笔记分享
- ruby 学习笔记(1) 初识语法
- MySQL 5.6 GTID新特性实践
- VC++获得当前进程运行目录的方法
- JQuery实现用户名无刷新验证的小例子
- Jquery实现顶部弹出框特效
- jquery如何把参数列严格转换成数组实现思路
- 详解js中Number()、parseInt()和parseFloat()的区别
- js实现的简单图片浮动效果完整实例
- 为什么你的网站没流量?做不大?
- Android Studio3.0.1填坑笔记
- Ubuntu上释放空间的5种简单方法
- Sql Server 数据库中调用dll文件的过程