蝈蝈俊.net

-- 用随笔来记录自己的技术感触
随笔 - 655, 评论 - 4839, 引用 - 276

导航

关于

这里是我的技术Blog,下一代CSDN社区Blog在 http://blog.csdn.net/ghj1976/

标签

每月存档

最新留言

  • re:WPF/Silverlight 控件的几幅继承关系图
    <p class="MsoNormal" style="text-align: center; line-height: 20pt; margin: 0cm 0cm...
    by oaoffices(注册) on 2010/2/7 18:38:37
  • tWTqXHvjmOmv
    XZ5W2T &lt;a href=&quot;http://zecclkdejwou.com/&quot;&gt;zecclkdejwou&lt;/a&am...
    by uwwkhptujtw(匿名) on 2010/2/7 11:26:16
  • Re
    Many times we wanted to order significant example thesis close to this topic in the &lt;a href=&...
    by Ellieru(匿名) on 2010/2/6 10:25:37
  • Rrwvthsw
    Very Good Site &lt;a href=&quot; http://www.newsland.it/nr/article/it-alt.faq/4163.html &...
    by Rrwvthsw(匿名) on 2010/2/6 5:51:43
  • Edozadcx
    Good crew it's cool :) &lt;a href=&quot; http://www.newsland.it/nr/article/it-alt.faq/4163.h...
    by Edozadcx(匿名) on 2010/2/6 3:56:25
  • Ptryjfhi
    i'm fine good work &lt;a href=&quot; http://www.newsland.it/nr/article/it-alt.faq/4143.html ...
    by Ptryjfhi(匿名) on 2010/2/6 2:52:34
  • samuel
    5l05ro http://www.cRk2bdPqQls602mIa4bgo.com
    by samuel(匿名) on 2010/2/5 4:00:27
  • samuel
    5l05ro http://www.cRk2bdPqQls602mIa4bgo.com
    by samuel(匿名) on 2010/2/5 4:00:25
  • qCSFwFqaMVQizlCas
    2dnR2u &lt;a href=&quot;http://geunkaxpmhqt.com/&quot;&gt;geunkaxpmhqt&lt;/a&am...
    by spahxbypafn(匿名) on 2010/2/5 1:47:48
  • Re
    Very oft the &lt;a href=&quot;http://quality-papers.com/topics/comparison_essay&quot;&am...
    by Gwen18uV(匿名) on 2010/2/4 16:16:33
  • samuel
    SnU3S6 http://www.cRk2bdPqQls602mIa4bgo.com
    by samuel(匿名) on 2010/2/4 15:37:58
  • Koxtggnh
    It's serious &lt;a href=&quot; http://www.newsland.it/nr/article/it-alt.faq/3298.html &q...
    by Koxtggnh(匿名) on 2010/2/4 6:09:20
  • SrehssllMZjp
    XefKdm &lt;a href=&quot;http://onztwqzldpty.com/&quot;&gt;onztwqzldpty&lt;/a&am...
    by fsfirjqclpn(匿名) on 2010/2/4 0:43:23
  • OLDLqAKsuD
    BnPVvu &lt;a href=&quot;http://jzyknfzplvon.com/&quot;&gt;jzyknfzplvon&lt;/a&am...
    by ofudghioo(匿名) on 2010/2/4 0:07:18
  • Hwbjmqub
    Punk not dead &lt;a href=&quot; http://www.newsland.it/nr/article/it-alt.faq/3238.html &...
    by Hwbjmqub(匿名) on 2010/2/3 14:14:20
  • Re
    From time to time different students have assignments to compose the &lt;a href=&quot;http:/...
    by Rebeccamp28(匿名) on 2010/2/3 11:04:43
  • emRTIwMZOMDFfCg
    nQf5M6 &lt;a href=&quot;http://eaykuvqnrful.com/&quot;&gt;eaykuvqnrful&lt;/a&am...
    by pnxjuwq(匿名) on 2010/2/2 23:36:36
  • jPRCuLgHySwb
    qc0qb5 &lt;a href=&quot;http://ciktzfijfsfj.com/&quot;&gt;ciktzfijfsfj&lt;/a&am...
    by yuplvewx(匿名) on 2010/2/2 19:05:07
  • re:IP to Integer
    IPV6呢?
    by howie(匿名) on 2010/2/2 10:34:10
  • IcqpxCPAVoKn
    Ff4AZo &lt;a href=&quot;http://bovwngagtlua.com/&quot;&gt;bovwngagtlua&lt;/a&am...
    by mbnbusiuh(匿名) on 2010/2/1 18:40:41
  • tJZDsNznVk
    scXyAq &lt;a href=&quot;http://pqtnkiwdacoa.com/&quot;&gt;pqtnkiwdacoa&lt;/a&am...
    by lwummgsncve(匿名) on 2010/2/1 3:53:51
  • Okurlpzt
    i'm fine good work &lt;a href=&quot; http://littlelolitasmodels.vox.com/ &quot;&gt;p...
    by Okurlpzt(匿名) on 2010/1/31 19:30:08
  • Sgoonhvn
    Excellent work, Nice Design &lt;a href=&quot; http://littlelolitasmodels.vox.com/ &quot;...
    by Sgoonhvn(匿名) on 2010/1/31 18:29:47
  • Zloozuuj
    Punk not dead &lt;a href=&quot; http://lolitatoplist.vox.com/ &quot;&gt;lolita mpeg...
    by Zloozuuj(匿名) on 2010/1/31 17:52:04
  • Jmqskdlf
    I love this site &lt;a href=&quot; http://younglolitasbbs.vox.com/ &quot;&gt;preetee...
    by Jmqskdlf(匿名) on 2010/1/31 15:09:12
  • Tmmhaxbr
    Wonderfull great site &lt;a href=&quot; http://lolitabbs969.vox.com &quot;&gt;lolita...
    by Tmmhaxbr(匿名) on 2010/1/31 14:31:36
  • Asnejtjx
    real beauty page &lt;a href=&quot; http://underagelolitas.vox.com/ &quot;&gt;top 50 ...
    by Asnejtjx(匿名) on 2010/1/31 12:51:18
  • Tibtihsu
    &lt;a href=&quot; http://lolitamodels.vox.com/ &quot;&gt;real young lolitas&lt;...
    by Tibtihsu(匿名) on 2010/1/31 7:50:15
  • Jlcdzoem
    Very Good Site &lt;a href=&quot; http://lolitamodels.vox.com/ &quot;&gt;kds pedo lol...
    by Jlcdzoem(匿名) on 2010/1/31 6:47:06
  • Eqczveev
    i'm fine good work &lt;a href=&quot; http://mipagina.univision.com/preteenlolitabbs/ &qu...
    by Eqczveev(匿名) on 2010/1/31 6:08:16
  • Ndhvewjd
    Very interesting tale &lt;a href=&quot; http://mipagina.univision.com/preteenlolitabbs/ &...
    by Ndhvewjd(匿名) on 2010/1/31 5:06:34
  • Jktojpnv
    &lt;a href=&quot; http://mipagina.univision.com/preteenlolitamodels/ &quot;&gt;goth...
    by Jktojpnv(匿名) on 2010/1/31 3:27:26
  • Lftiemmn
    Very interesting tale &lt;a href=&quot; http://mipagina.univision.com/preteenyounglolitas/ &...
    by Lftiemmn(匿名) on 2010/1/31 2:51:02
  • ITYAtUVjqijsAcZ
    4SnRK4 &lt;a href=&quot;http://lbmuqlnscvjk.com/&quot;&gt;lbmuqlnscvjk&lt;/a&am...
    by pqoqxfvrbcb(匿名) on 2010/1/30 19:25:06
  • bjhbHxudMahxGCkiue
    3mRPzg &lt;a href=&quot;http://rzitclgaemis.com/&quot;&gt;rzitclgaemis&lt;/a&am...
    by quglkot(匿名) on 2010/1/30 19:20:51

广告

 

我们书写查询语句的时候,Join 参数之前可以是下面三个 { LOOP | MERGE | HASH } JOIN  。 如果不使用,则系统自己分析那种方式快,使用那种方式。

这其实是SQL Server 联结时候使用的三种算法。尽管每种算法都并不是很复杂,但考虑到性能优化,在产品级的优化器实现时往往使用的是改进过的变种算法。譬如SQL Server 支持block nested loops、index nexted loops、sort-merge、hash join以及hash team。我们在这里只对上述三种基本算法的原型做一个简单的介绍。

 

知识点:

      Tables join总是两个两个进行的。所以下面的算法都是两个表的联结。

  • Hash Join (哈希联结)
    • 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。
    • HASH  JOIN
    • 逻辑步骤,如下图:
      • 以数据少的数据表的 Join 字段建立 Hash 值。
      • 对应的数据表计算 Join 字段的 Hash ,再与前一个数据表做比对。
      • Hash Join
    • 特点:
      • 处理大量、未排序、无索引的数据
      • 一般来说,查询优化器会首先考虑Nested Loop和Sort-Merge,但如果两个集合量都不小且没有合适的索引时,才会考虑使用Hash Join。
      • Hash Join也用于许多集合比较操作,inner join、left/right/full outer join、intersect、difference等等,当然了,需要保证都是等值联结。
      • Hash Join一个较大限制是它只能应用于等值联结(equality join),这主要是由于哈希函数及其桶的确定性及无序性所导致的。

 

  • Nested Loop Join (嵌套循环联结)
    • 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。
    • NESTED-LOOP  JOIN
    • 逻辑步骤,如下图:
      • 从外层的数据表取出一笔记录
      • 使用这个记录扫描内层的数据表
      • 再回到外层的数据表,重复上述的步骤。
      • Join Operation--Nested-Loop Join
    • 特点:
      • 适用于一个集合大而另一个集合小的情况(将小集合做为外循环),I/O性能不错。
      • 当外循环输入相当小而内循环非常大且有索引建立在JOIN字段上时,I/O性能相当不错。
      • 当两个集合中只有一个在JOIN字段上建立索引时,一定要将该集合作为内循环。
      • 对于一对一的匹配关系(两个具有唯一约束字段的联结),可以在找到匹配元组后跳过该次内循环的剩余部分(类似于编程语言循环语句中的continue)。
      • 可以不是等值联结

 

  • Merge Join (合并联结)
    • 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。
    • MERGE  JOIN
    • 逻辑步骤。如下图:
      • 使用两个数据表用来 Join 的字段既有的索引
      • 两边的数据表以光标由小到大比较,一边移动到比另一个数据表大时,换移另一个数据表。
      • Join Operation--Merge Join
    • 特点:
      • 可以不是等值联结
      • MERGE JOIN 必须等待两个单独的SORT JOIN完成(如果使用索引作为数据源,可以跳过SORT JOIN这个步骤), 如果两个表的规模相差很大, 会很影响查询的性能。
      • 当查询的两个表都很大或者都很小的时候, 则应该只用MERGE JOIN,如果两个表都很小,则表扫描和分类将进行的很快;

 

分别使用这三种 Join 的例子:

create table t1 ( i int not null )
create table t2 ( i int not null )
go
set showplan_text on
go
-- Hash Match(Inner Join, HASH:([ghj_Demo].[dbo].[t2].[i])=([ghj_Demo].[dbo].[t1].[i]))
select * from t1 join t2 on t1.i = t2.i
go

set showplan_text off
go
alter table t1 add primary key ( i )
alter table t2 add primary key ( i )
go

set showplan_text on
go
-- |--Nested Loops(Inner Join, OUTER REFERENCES:([ghj_Demo].[dbo].[t1].[i]))
select * from t1 join t2 on t1.i = t2.i
go
set showplan_text off
go

set showplan_text on
go
-- Merge Join(Inner Join, MERGE:([ghj_Demo].[dbo].[t1].[i])=([ghj_Demo].[dbo].[t2].[i]),

-- RESIDUAL:([ghj_Demo].[dbo].[t2].[i]=[ghj_Demo].[dbo].[t1].[i]))
select * from t1 join t2 on t1.i = t2.i option(merge join)
go
set showplan_text off
go


drop table t1, t2

 

参考资料:

浅谈查询优化器中的JOIN算法
http://blog.csdn.net/hdy007/archive/2007/02/28/1516467.aspx

 

Example of merge ,hash and nested join
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=498748&SiteId=1

 

Inside SQL Server Joins
http://blog.csdn.net/happydreamer/archive/2007/05/16/1611523.aspx

打印 | 张贴于 2008-01-23 16:05:00 | Tag:技术随笔  数据库开发管理心得  读书笔记

留言反馈

#teTXzrSnoyrwWEfZDh 编辑
GvDQqX <a href="http://gmbeabhiwzjj.com/">gmbeabhiwzjj</a>, [url=http://lfyyqjneknsv.com/]lfyyqjneknsv[/url], [link=http://pcrlwxxfhuuz.com/]pcrlwxxfhuuz[/link], http://dsuzfqgalybe.com/
2010-01-27 16:35:56 | [匿名:dqviyxlrw]
#BkZUgGzWTwtfNxRkzbD 编辑
jnEwAd <a href="http://bsiivamsbmfn.com/">bsiivamsbmfn</a>, [url=http://uaiyggnbzzkf.com/]uaiyggnbzzkf[/url], [link=http://ofpgpqnowjuz.com/]ofpgpqnowjuz[/link], http://izrpysictjox.com/
2010-01-25 17:15:55 | [匿名:tevfzpuwpvs]
#BkZUgGzWTwtfNxRkzbD 编辑
jnEwAd <a href="http://bsiivamsbmfn.com/">bsiivamsbmfn</a>, [url=http://uaiyggnbzzkf.com/]uaiyggnbzzkf[/url], [link=http://ofpgpqnowjuz.com/]ofpgpqnowjuz[/link], http://izrpysictjox.com/
2010-01-25 17:15:49 | [匿名:tevfzpuwpvs]
#qUZaHHQlfKmpCOm 编辑
lKVO2n <a href="http://dfvgsvxwbfys.com/">dfvgsvxwbfys</a>, [url=http://ufsasxxcedpj.com/]ufsasxxcedpj[/url], [link=http://esfsumpccodd.com/]esfsumpccodd[/link], http://zqcnpyowiwij.com/
2010-01-25 08:38:00 | [匿名:gcjirl]
#qUZaHHQlfKmpCOm 编辑
lKVO2n <a href="http://dfvgsvxwbfys.com/">dfvgsvxwbfys</a>, [url=http://ufsasxxcedpj.com/]ufsasxxcedpj[/url], [link=http://esfsumpccodd.com/]esfsumpccodd[/link], http://zqcnpyowiwij.com/
2010-01-25 08:37:02 | [匿名:gcjirl]
#QUhjBDMbbsZ 编辑
3bcG9C <a href="http://suoezcwgoauh.com/">suoezcwgoauh</a>, [url=http://lmrwbbexcepi.com/]lmrwbbexcepi[/url], [link=http://lgkwxvwgwtck.com/]lgkwxvwgwtck[/link], http://tdubtqjeinuf.com/
2010-01-25 07:40:00 | [匿名:vcrdxc]
#cHtQgsSyMqIAdv 编辑
PRCOas <a href="http://yagptrsmtddz.com/">yagptrsmtddz</a>, [url=http://vuemhhhifbnv.com/]vuemhhhifbnv[/url], [link=http://qpyjulmgvgvt.com/]qpyjulmgvgvt[/link], http://qqclgduexqla.com/
2010-01-25 02:48:34 | [匿名:nqshknfzu]
#re:SQL Server 索引基础知识(10)----Join 时的三种算法简介 编辑
我以前一直只知道join ,但当别人问索引时却不知道是何物。 在这里却有了很大的明了。。。
2010-01-22 16:19:33 | [匿名:jin]
#回复: SQL Server 索引基础知识(10)----Join 时的三种算法简介 编辑
合并俩接的演示可以将2表的数据做成等多,并且加上索引,就会出现合并连接。
select * from t1 join t2 on t1.i = t2.i option(merge join)
这个演示不大起到演示作用
2008-02-18 16:33:00 | [匿名:xx]
#回复: SQL Server 索引基础知识(10)----Join 时的三种算法简介 编辑
有点意思, 思路是非 常不错的……
2008-01-30 13:54:00 | [匿名:51zjp]
#回复: SQL Server 索引基础知识(10)----Join 时的三种算法简介 编辑
不错不错,谢谢楼主分享!!!
2008-01-25 16:56:00 | [匿名:solidworks]
#回复: SQL Server 索引基础知识(10)----Join 时的三种算法简介 编辑
有进步,要从Join的算法,进而理解选择算法的方式,从而帮助系统选择合适的算法。

P.S。你为啥不参考BOL呢?其实比你看那些参考资料清楚。
2008-01-23 16:44:00 | [匿名:怡红公子]

发表留言

标题
姓名
邮件
主页
留言 

Powered by: Joycode.MVC引擎 0.5.2.0