首页 理论教育数据库性能管理与调优-排序合并连接

数据库性能管理与调优-排序合并连接

【摘要】:SORT MERGE JOIN指各自访问两侧表的处理范围后逐一扫描排序结果,同时使用连接条件进行合并的方式。通过SORT MERGE JOIN引导调优的情况几乎不存在,但可能对减少RANDOM ACCESS、大容量处理对象集有效。以下将介绍SORT MERGE JOIN的其他特征以及能保证良好性能的情形。通常NESTED LOOP JOIN对待处理数据量较少的在线应用程序更为有效,因此请勿随意使用SORT MERGE JOIN。

SORT MERGE JOIN指各自访问两侧表的处理范围后逐一扫描排序结果,同时使用连接条件进行合并(Merge)的方式。通过SORT MERGE JOIN引导调优的情况几乎不存在,但可能对减少RANDOM ACCESS、大容量处理对象集有效。由前文可知,NESTED LOOP JOIN访问大容量数据时会执行较多RANDOM ACCESS,可能会降低性能,但SORT MERGE JOIN执行全表扫描时可执行MULTI BLOCK I/O和SEQUENTIAL READ,可能会得到更好的性能。该方式最大的特征是不会接收对方的任何值,仅使用自己拥有的条件就可确定处理范围,因此可以减少随机访问的情况,但始终会执行全表扫描。以下将介绍SORT MERGE JOIN的其他特征以及能保证良好性能的情形。

1)特征

(1)同时进行处理。表访问各自的处理范围再进行排序。

(2)各个表不会从其他表接收任何常数值。即仅由各自指定的常数值缩小范围。

(3)无法执行部分范围处理,始终执行全范围处理。

(4)主要以扫描方式处理。为缩小自身处理范围而使用索引时才为随机访问,合并操作为扫描方式。

(5)就算指定条件中的所有列均有索引,也不会全部使用。具有链路作用的列完全不会使用索引。

(6)与连接方向完全无关。

(7)为缩小自身处理范围而使用的索引将选择最有利的一个索引。虽然其他条件无法使用索引,但能减少操作对象,因此有重要意义。

2)使用标准

(1)进行全范围处理时较为有效。

(2)在对方表中不接收任何常数值就能缩小处理范围时较为有效。将接收常数值后处理(NESTED LOOP JOIN)范围的大小与缩小处理范围后处理(SORT MERGE JOIN)范围的大小进行比较时,若接收常数值后范围缩小约30%以上,SORT MERGE JOIN通常有效。但对部分范围处理则完全不同。在这种情况下,不要比较要处理的全部范围,为达到第一个数组大小而需要判断访问的范围。

(3)主要处理量较大时(始终要进行全范围处理时)有效。这是由于处理方式主要采用扫描方式,因此可以减少大量随机访问。(www.chuimin.cn)

(4)这不会受到链路异常状态的影响,因此无须为链路生成索引。

(5)如何缩小自身处理范围对执行速度产生很大的影响,因此更为有效地构成访问索引非常重要。

(6)处理方式为全范围处理,因此数组大小不会影响执行速度。可用的数组越大则FETCH次数越少。当然,若数组过大则会对系统产生不良影响。

(7)通常NESTED LOOP JOIN对待处理数据量较少的在线应用程序更为有效,因此请勿随意使用SORT MERGE JOIN。

(8)优化器目标(Goal)为“ALL_ROWS”时,通过 SORT MERGE JOIN确立执行计划的可能性较高,若要执行部分范围处理,应注意优化器目标的指定方式。

参考以下例子:

优化器判断以上查询语句的执行计划的过程如下。

3)条件语句分析

(1)连接条件的索引:a.PK=b.FK,两侧均不存在。

(2)连接顺序 :tab2→tab1。

(3)连接方法:SORT MERGE JOIN(参数 HASH_JOIN_ENABLED的值为FALSE时)。