1. NESTED LOOP

对于被驱动表 数据量较小的情况,循环嵌套是个较好的选择

适用于:内表关联字段一定要有索引+ 数据集较小(小于10000条记录)

可以用ORDERED 提示来改变CBO默认的驱动表,使用USE_NL(table_name1 table_name2)可是强制CBO 执行嵌套循环连接

2.  HashJoin

对于被驱动表较大的情况,哈希关联 是个较好的选择

适用于: 小表足够小,大表一定要有索引

USE_HASH(table_name1 table_name2)提示来强制使用散列连接。如果使用散列连接HASH_AREA_SIZE
初始化参数必须足够的大,如果是9i,Oracle建议使用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY
为AUTO,然后调整PGA_AGGREGATE_TARGET即可

3. SORT MERGE JOIN(一般加索引)

通常情况下,散列连接效率 >>  排序合并效率

适用于:大表没有索引,且数据已排好序

可以使用USE_MERGE(table_name1 table_name2)来强制使用排序合并连接.

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐