表连接的方式有三种分别是:排序合并连接(Sort Merge Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)。

1、 排序合并连接(Sort Merge Join)

排序合并连接的执行过程如下所示:

* 将每个行源的行按连接谓词列排序

* 然后合并两个已排序的行源,并返回生成的行源

例如:

select * from employees d,departments t where d.department_id=t.department_id;
访问机制如下:访问departments表并排序department_id列,访问employees表并排序department_id列,然后依次交替比较、归并。

注意:排序合并连接一般用在两张表中没有索引,并且连接列已经排好序的情况下。

2、嵌套循环连接(Nested Loops Join)

* 两个表中的一个被定义为“外部表”(或“驱动表”)

* 另一个表被称为“内部表”

* 将针对外部表中的每一行检索内部表中所有匹配的行

注意:join的顺序很重要,一般选择小表作为“驱动表”,大表作为“内部表”。如两个表,一个100行,一个10000行,理想的连接方式是:100行的小表作为“驱动表”,10000行的大表作为“内部表”,用小表中的每条记录去匹配大表中的记录。如果两张表的连接词在大表中是索引列,则是最完美的。

3、
哈希连接(Hash Join)

* 优化器对小表利用连接键在内存中建立hash表

* 扫描大表,每得到一条记录,就来hash表中“探测”一次,找出与hash表匹配的行

注意:Hash Join 是CBO做大数据集连接时的常用方式。

【Oracle】表连接三种方式的更多相关文章

  1. PHP连接数据库、创建数据库、创建表的三种方式

    这篇博客主要介绍了三种方式来连接MySQL数据库以及创建数据库.创建表.(代码是我在原来的基础上改的) MySQLi - 面向对象 MySQLi - 面向过程 PDO MySQLi 面向对象 < ...

  2. SQL语句的执行计划(oracle表的三种链接方式)

    SQL语句我们写完之后,就是分析其优化,这就要求我们了解到底数据是怎么存储. 首先我们需要了解,表链接的几种方式 nested loop join sort merge join hash join ...

  3. django基础之day09,多对多创建数据表的三种方式

    多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...

  4. Mysql 删除数据表的三种方式详解

    用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, 用 delete. 删除强度:dro ...

  5. 七十三、SAP中清空内表的三种方式

    一.上代码 二.需要注意的是 * CLEAR 只能清空不带WITH HEADER LINE的内表* REFRESH 能清空内表,但是不回收内存* FREE 能清空内表并回收内存,但是此内表还能继续使用

  6. 多表连接的三种方式 HASH MERGE NESTED

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

  7. Java连接Oracle数据库的三种连接方式

    背景: 这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询. SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQ ...

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

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

  9. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

随机推荐

  1. 第五节:numpy之数组维度处理

  2. Django-cookie与session操作

    添加cookie: def login(req): if req.method=="POST": uf = UserInfoForm(req.POST) if uf.is_vali ...

  3. Boa服务器编译移植

    Boa服务器移植 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右.作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求.但Boa支 ...

  4. 7-19 求链式线性表的倒数第K项

    7-19 求链式线性表的倒数第K项(20 分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示 ...

  5. nlogn求LIS(树状数组)

    之前一直是用二分 但是因为比较难理解,写的时候也容易忘记怎么写. 今天比赛讲评的时候讲了一种用树状数组求LIS的方法 (1)好理解,自然也好写(但代码量比二分的大) (2)扩展性强.这个解法顺带求出以 ...

  6. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案

    在开发winphone程序时候 我们经常遇到调试.在调试的时候 可能会重复打开 debug一下.可是有时候 经常遇到 "正在加载...."字样.而且很慢.效率很低. 测试发现 在 ...

  7. 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚

      最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.     有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过.     可以在这里看到相关的 ...

  8. [cogs396] [网络流24题#4] 魔术球 [网络流,最大流,最小路径覆盖]

    本题枚举每多一个球需要多少个柱子,可以边加边边计算,每次只需要判断$i-Dinic()$即可:特别注意边界. #include <iostream> #include <algori ...

  9. iOS中UITextView的操作技巧

    刚才看了一篇textView实现placeholder的文章,有兴趣的同学们能够看下:__biz=MzA3NzM0NzkxMQ==&mid=211846438&idx=1&sn ...

  10. Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任

    Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任         每次在Web界面,点击某一责任的功能时,弹出Form.会提示错误:对不起,不存在可用的有效责任.         ...