religiose 发表于 2013-1-29 16:20:26

[转载] MySQL LEFT/RIGHT JOIN算法效率分析

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.penglixun.com/tech/database/mysql_outer_join_analyse.html 上次讨论了MySQL INNER JOIN算法的效率,怪自己没看仔细官方文档,实际上MySQL对内联查询采用了“下推”的方法,见官方文档。
理论上下推也是可以用到外联接上的,没看懂官方的那段伪代码,根据自己的想法写了一段测试代码,就是昨天代码的改进。
 
下面是官方给出的采用下推的算法:
<div class="wp_codebox">FOR each row t1 in T1 such that C1(t1) {BOOL f1:=FALSE;FOR each row t2 in T2      such that P1(t1,t2) AND (f1?C2(t2):TRUE) {    BOOL f2:=FALSE;    FOR each row t3 in T3      such that P2(t2,t3) AND (f1&&f2?C3(t3):TRUE) {      IF (f1&&f2?TRUE:(C2(t2) AND C3(t3))) {      t:=t1||t2||t3; OUTPUT t;      }      f2=TRUE;      f1=TRUE;    }    IF (!f2) {      IF (f1?TRUE:C2(t2) && P(t1,t2,NULL)) {      t:=t1||t2||NULL; OUTPUT t;      }      f1=TRUE;    }}IF (!f1 && P(t1,NULL,NULL)) {      t:=t1||NULL||NULL; OUTPUT t;}}
页: [1]
查看完整版本: [转载] MySQL LEFT/RIGHT JOIN算法效率分析