SQL Server Join 方式

 SQL Server Join 方式

Author:zfive5(zidong)
Email:zfive5@163.com

引子

参加查询计划培训后,发现数据库绝对不是“增删改查”那么简单,即使来从业10几年的专家,也不敢说自己数据库多么精通。通过大家交流后发现即使selectcount(*) 都会产生不一样的结果。

 

培训的时候讲到了很多执行计划的图标,其中就三个图标的含义,在不同的文章解释一大堆话,而且看到有些似懂非懂的,直至看到《看懂SqlServer查询计划》中的伪码才恍然大悟。

 

URL:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html#_label1

 

 

所以想用伪码表达一下其他两个方式。

正文

哈希匹配:

前提:无

 

 

 

图标画的也很到位

 

 

foreach(row  r1  in  outer table)

{

    HashTable (Hash(r1),r1);

}

 

foreach(row  r2  in  innertable)

{

If(HashTable.contians(Hash(r2)))

  output(HashTable (Hash(r2), r2)

}

 

合并连接:

 

前提:两个连接字段是排序的

 

 

 

图标画的也很到位

 

Int  i=0;

Int  j=0;

for( ; i< outer Table.count;)

{

r1=outer table[i];

for(;j< inner Table.count ;)

{

        if(r1= r2 )  

{

output(r1, r2);

j++;

}

 

        if(r1>r2)   

{

j++;

  continue;

}

 

        if(r1<r2)

        {

          I++;

          break;

        }

    }

}

 

 

 

 

嵌套循环:

 

 

 

图标画的也很到位

 

 

foreach(row  r1  in  outer table)

{

foreach(row  r2  in  inner table)

{

        if( r1, r2 符合匹配条件 )

            output(r1, r2);

    }

}

 

嵌套循环伪码来自上面提到的文章

 

下图摘自《SqlServer2008查询性能优化》:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值