版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/sssbbbryj/article/details/27795905


关于HASH_JION的原理
我们在做hash_join关联的时候,通常会有两张表,
当中较小的表我们叫做:build input
较大的表我们叫做:probe input ;
那么oracle是怎样让这两张表做关联的呢?
首先,oracle会选择build input。将其读入到内存中。
这里oracle会给hash_join一块单独的内存叫hash area。
假设build input小于指定的hash area则。再对probe input做hash 链接
假设我们的build input大于指定的hash area,
则build input和probe input做分区处理,将这两个划分到
不同的分区中去,假设划分后大小合适的话,则读入到hash area中做hash处理
假设划分后还是比較大的话,oracle会做nested—loops hash join处理,
直到符合hash area的大小。

ABOUT NESTED JOIN
这个连接的方法中有驱动表(外部表)的概念。

事实上这个连接就是2层的嵌套循环问题。所以外层的循环表越小越好。
这样从理论上来说循环的次数将会降低,这也就是我们为什么将小表或者row source较小的表
作为外层循环表的理论根据。

由于在正确的选择中这种处理方式从理论上来说将会降低I/O的数量

可是这个也不是绝对的根据。

我们决定的那张表为驱动表也就是外部表对SQL的运行效率有重要的影响。其内部的连接方式是:
row source1的row1-->probe row source2(驱动表,外部表)
row source1的row2-->probe row source2(驱动表,外部表)
row source1的row3-->probe row source2(驱动表,外部表)
从它的运行原理上我们也可以看到row source2选择的重要性。

当然假设row source1比較小的话。这种运行方式的效率也会更高。
普通情况下row source1通过index去訪问row source2的话效率也会更高,当然前提是row source2必须有index。
row source1去匹配row source2的全部行,假设有匹配的结果,则将其放入将要返回的结果集中。

看到这里,我们可能会想到,使用这种方式。原理上我们一定须要遵守两种最简单的条件。当然假设
不满足的话也没关系,仅仅只是性能上会差一些吧,
(1)我们在选择驱动表(外表)的时候尽量的选择小一些的,这样理论上物理的I/O将将会少一些。

(2)尽量的在驱动表上建立索引,这种话查询的效率会高一些。
 

HASH JION AND NESTED JION的更多相关文章

  1. Sql优化(一) Merge Join vs. Hash Join vs. Nested Loop

    原创文章,首发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com Nested Loop,Hash Join,Merge Join介绍 Nested Loop: 对于被 ...

  2. Merge join、Hash join、Nested loop join对比分析

    简介 我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join ...

  3. MySQL之left jion 、 right jion 和inner jion 的区别和使用方法

    left jion   左联结 right jion 右联结 inner jion 等值联结 create table teacher( tid ) primary key auto_incremen ...

  4. 多表连接的三种方式详解 hash join、merge join、 nested loop

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...

  5. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...

  6. oracle 表连接 - hash join 哈希连接

    一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...

  7. OPTIMIZER_INDEX_COST_ADJ 与OPTIMIZER_INDEX_CACHING 参数说明

    [部分转载]http://www.xifenfei.com/2012/06/optimizer_index_caching和optimizer_index_cost_adj参数说明.html 1. O ...

  8. 如何在不改SQL的情况下优化数据库

    主题简介 在数据库运维中我们会遇到各种各样的问题,这些问题的根源可能很明显,也可能被某种表象掩盖而使我们认不清.所以运维面临的两大问题就是,第一我们没有看清本质,第二应用不允许修改.那么我们如何解决这 ...

  9. MVCC PostgreSQL实现事务和多版本并发控制的精华

    原创文章,同步发自作者个人博客,http://www.jasongj.com/sql/mvcc/ PostgreSQL针对ACID的实现机制 事务的实现原理可以解读为RDBMS采取何种技术确保事务的A ...

随机推荐

  1. TCP/IP协议分为哪四层,具体作用是什么。

    TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远 ...

  2. jQuery.Flot开发手记

    目录 介绍 使用 自定义参数 自定义图例 自定义坐标 自定义数据序列 自定义网格 其他 鼠标停留在图表节点时显示tooltip 介绍 项目地址:http://www.flotcharts.org/ A ...

  3. (转)PEP 8——Python编码风格指南

    PEP 8——Python编码风格指南标签(空格分隔): Python PEP8 编码规范原文:https://lizhe2004.gitbooks.io/code-style-guideline-c ...

  4. Android触摸事件传递机制

    简单梳理一下Android触摸事件传递机制的知识点. 一.View与ViewGroup的关系 View和ViewGroup二者的继承关系如下图所示: View是Android中最基本的一种UI组件,它 ...

  5. python网络编程——简单例子

    客户端(client.py) import socket import sys port = 70 host = sys.argv[1] filename = sys.argv[2] s = sock ...

  6. js 用简单案例举模态对话框弹出

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. js 获取时间相关

    $(document).ready(function () {            var date = new Date();            var sb = "";  ...

  8. C#自定义控件 在 Toolbox显示不了的问题

    1) Close your solution2) Tools->Options->"Windows Form Designer" - find AutoToolboxP ...

  9. 写一个安全的Java单例

    单例模式可能是我们平常工作中最常用的一种设计模式了.单例模式解决的问题也很常见,即如何创建一个唯一的对象.但想安全的创建它其实并不容易,还需要一些思考和对JVM的了解. 1.首先,课本上告诉我,单例这 ...

  10. 利用ajax短轮询+php与服务器交互制作简易即时聊天网站

    主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 本文主要介绍ajax短轮询的简易实现方式. 看懂此文 ...