有驱动顺序,驱动表(结果集)返回多少记录,被驱动表(结果集)就被访问多少次,无须排序。
一、NESTED LOOPS
嵌套循环算法
特点
1、高度依赖索引,被驱动表索引只能为:INDEX UNIQUE SCAN、INDEX RANGE SCAN,才能保障性能高
效;
2、小结果集做驱动表,大结果集做被驱动表,才能保障性能高效;
3、DBLINK永远不能作为NL的被驱动表;
4、两表使用外连接进行关联,如果是NESTED LOOPS,那么无法更改驱动表,驱动表将会被固
定在主表;
5、连接条件是instr、LIKE、substr、regexp_like只能走NESTED LOOPS;
6、HINT写法:t1为驱动表,t2为被驱动表
二、HASH JOIN
HASH连接算法
1、Build 阶段:读取小表(Build Input)生成Hash表;
2、Probe 阶段:读取大表(Probe Input)探查Hash表并进行连接;
3、Build 操作在PGA中进行,不够时使用临时表空间;
4、被驱动表(被驱动表不需要读入PGA中),对被驱动表的连接列也进行hash运算,然后到PGA中去探测Hash
表进行连接;
特点
1、当表数据太大PGA放不下,会使用临时表空间,从而影响性能;
2、驱动顺序:小的结果集先访问,大的结果集后访问,才能保证被驱动表的访问次数降到最低,
才能保障性能;
3、驱动表和被驱动表都只会访问0次(索引能返回数据,就不需要再回表)或者1次;
4、HASH连接的驱动表与被驱动表的连接列都不需要创建索引;
文档被以下合辑收录
评论