首页 理论教育数据库性能管理与调优:连接种类与顺序详解

数据库性能管理与调优:连接种类与顺序详解

【摘要】:对象表的连接顺序和方法不同是为了加快访问速度。因此即使变更连接方法和顺序,结果值也不能有任何变化。连接时表的驱动顺序是性能中的重要组成部分。4)优化器的连接选择对于参与连接条件语句的列,索引位置对优化器决定执行计划时的连接顺序和方法有很大影响。连接列的两侧均无索引时,将SORT MERGE JOIN或HASH JOIN用作连接方法。

调优时会遇到很多与索引相关的性能问题,因表和表之间的关系导致性能下降的情况也非常多。通过逻辑组合2个以上的表推导所需数据的方法即为连接。连接是非常有效的方法,但若错误地使用则会严重降低性能,因此应充分理解后再学习后面内容。

在本章节中,将重点放在这两点上来介绍连接。

(1)理解优化器根据连接条件确定连接表的顺序和方法的方式。

(2)理解响应速度根据连接方法和顺序造成工作量的不同而变化的情况。

1)连接和子查询的差别

(1)连接(JOIN):用户所需的数据在2个以上的表中时,通过连接各个表的特定列值相同的表来提取数据的方法。

(2)子查询(SUBQUERY):将当前数据与子查询结果数据进行比较,用于过滤所需对象(简而言之,查询语句中还有一个以上的查询语句)。

2)连接方法

(1)物理分类:NESTED LOOP JOIN; SORT MERGE JOIN; HASH JOIN; STAR JOIN。

(2)逻 辑 分 类 :NORMAL JOIN (EQUAL JOIN) ; OUTER JOIN; SEMI JOIN; ANTI JOIN; CARTESIAN JOIN。

对象表的连接顺序和方法不同是为了加快访问速度。因此即使变更连接方法和顺序,结果值也不能有任何变化。(www.chuimin.cn)

3)连接速度

连接速度与工作量(SCAN数)成反比,工作量根据连接顺序和方法变化。始终最先读取具备执行最少扫描条件的表。如果所有条件连接相同的表,会将FROM子句最右侧的表定为driving表[1],并将左侧定为驱动顺序。连接时表的驱动顺序是性能中的重要组成部分。

4)优化器的连接选择

对于参与连接条件语句的列,索引位置对优化器决定执行计划时的连接顺序和方法有很大影响。

(1)外部连接(OUTER JOIN):连接顺序按没有(+)的表到有(+)的表的顺序进行;否则,执行结果将不同。

(2)连接列只有一侧有索引时,连接顺序按没有索引的表到有索引的表的顺序进行;否则,连接时会出现 FULL SCAN,可能会导致过多的 I/O。

(3)连接列的两侧都有索引时,无法用连接条件判断连接顺序。因此,将剩余条件中具有最小化扫描范围条件的表用作driving表。在索引的同等条件下,unique、nonunique、单个索引、组合索引等也能成为比较对象。unique索引的驱动优先级高于nonunique,组合索引成为驱动表的优先级高于单个索引。如果在此步骤还是无法进行判断,优化器将从后(从最右侧开始)往前(向左侧)构成FROM子句的连接顺序。

(4)连接列的两侧均无索引时,将SORT MERGE JOIN或HASH JOIN用作连接方法。HASH JOIN是最小化SORT MERGE JOIN的I/O的算法。SORT MERGE JOIN在连接中表现性能最差,因此尽量引导为 HASH JOIN。

在连接的表中确定driving表时索引有无非常重要。但请勿混淆,这时不是指表中存在的索引,而是指WHERE子句中使用的列是不是索引。