图:什么是外连接
A表和B表共同的部分,即为内连接操作
图:分别执行了内连接和外连接
图:内连接和左外连接的执行结果
图:外连接的连接类型
图:右外连接与全外连接
图:为什么做外连接的消除,把外连接变为内连接
图:外连接消除的意义
图:两个实例
如上图所示,t1 inner join t2 on P1(T1, T2) inner join t3 on P2(T2, T3),对于t1中的每条记录,遍历t2中的每条记录,然后根据t2中的记录,遍历
t3中的记录,找到满足条件的元组,len(t1)*len(t2)*len(t3)
上图右边部分是t1、t2和t3左外连接操作的执行形式,可以看出比内连接多做了判断的操作,多占用了cpu资源
图:外连接消除的条件
where条件可以保证从结果中排除外连接右侧(右表)生成的值为NULL的行,因为where条件中的t_1_id=t_2_id保证了
t_2_id不可能是空的。
从上图中可以看到左外连接没有被消除掉,转换为内连接
图:左外连接被消除掉了,转换为了内连接
因为t_2_id>0表明t2表是不会出现空行的,即内表产生的结果不会产生空行
目标列是一样的,而where条件是不同的,可以把第一条转换为第二条或者第三条语句来手工调优
首先把b和c优先连接的语义去除了,然后就是改变了括号的连接顺序