博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HASH JOIN ,SORT MERGE JOIN ,NESTED LOOP
阅读量:3557 次
发布时间:2019-05-20

本文共 1272 字,大约阅读时间需要 4 分钟。

NESTED LOOP:
对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。在嵌套循环中,内
表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回
的结果集不能太大(大于1 万不适合),要把返回子集较小表的作为外表(CBO 默认外表是
驱动表),而且在内表的连接字段上一定要有索引。当然也可以用ORDERED 提示来改变CBO
默认的驱动表,使用USE_NL(table_name1 table_name2)可是强制CBO 执行嵌套循环连接。
HASH JOIN:
散列连接是CBO 做大数据集连接时的常用方式,优化器使用两个表中较小的表(或数据
源)利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配
的行。
这种方式适用于较小的表完全可以放于内存中的情况,这样总成本就是访问两个表的成
本之和。但是在表很大的情况下并不能完全放入内存,这时优化器会将它分割成若干不同的
分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量
提高I/O 的性能。
HASH JOIN用一个较小表作hash表存储到内存或temp表空间,然后全表扫描另个表
也可以用USE_hash(table_name1 table_name2)提示来强制使用散列连接。如果使用散
列连接HASH_AREA_SIZE 初始化参数必须足够的大,如果是9i自动配置PGA,Oracle建议使
用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY 为AUTO,然后调整PGA_AGGREGATE_TARGET 即可。
hash_area_size用于在内存中进行排序的区域
hash_value不会影响PGA,他是系统自动计算hash运算,以定位内存地址。
增大hash_area_size,可以减少物理磁盘的排序,所以提高排序的速度。
9I管理PGA有两种方式,同时影响到hash_area_size
自动配置PGA
手动配置PGA
如果设置了auto,那么sort area, hash area自动分配大小,pga_aggregate_target参数被使用。
如果设置为 manual,那么参数sort area, hash area参数被使用,对于某些特别耗资源的可以指定manual,
然后设置合理的sort area,hash area。
hash_area_size是进行
hash join时用的
hash内存,sort_area_size是排序用的内存
SORT MERGE JOIN:
通常情况下散列连接的效果都比排序合并连接要好,然而如果行源已经被排过序,在执
行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。可以使用
USE_MERGE(table_name1 table_name2)来强制使用排序合并连接
SORT MERGE 成本应该是(full scan a +sort a )+(full scan b+sort b)

转载地址:http://bjdrj.baihongyu.com/

你可能感兴趣的文章
Java基础入门 DateFormat类
查看>>
Java基础入门 Window类及Panel类
查看>>
Java基础入门 AWT事件处理
查看>>
Java基础入门 鼠标事件
查看>>
Java基础入门 键盘事件
查看>>
Java基础入门 GridLayout
查看>>
JavaEE Bean的两种常用作用域 singleton(单例)和prototype(原型)
查看>>
MySQL 数据库索引
查看>>
JavaEE Spring与MyBatis的整合之传统DAO方式整合(教材学习笔记)
查看>>
JavaEE MyBatis与Spring的整合——基于mapper接口方式开发(教材学习笔记)
查看>>
JavaWeb 使用Cookie实现——显示用户上次访问时间(教材学习笔记)
查看>>
Omap138开发板下以uboot2012.04.01为例分析uboot执行(五)
查看>>
Omap138开发板下以uboot2012.04.01为例分析uboot执行(六)
查看>>
Omap138开发板下以uboot2012.04.01为例分析uboot执行(七)
查看>>
Omap138开发板下以uboot2012.04.01为例分析uboot执行(八)
查看>>
中国大学MOOC—陆军工程大学数据结构MOOC习题集(2018秋)7-3 中位数
查看>>
Java发送邮件 注册成功发送邮件
查看>>
Mybatis的简单使用(增删改查),解决数据库字段名和实体类映射属性名不一致的问题
查看>>
Mybatis配置log4j文件 分页查询(limit,rowBounds)
查看>>
Mysql利用注解进行开发
查看>>