SQL Server 2005合并联接算法(一)

日期: 2008-08-25 作者:zping 来源:TechTarget中国 英文

  简介:


  如果两个联接输入并不小但已在二者联接列上排序(例如,如果它们是通过扫描已排序的索引获得的),则合并联接是最快的联接操作。如果两个联接输入都很大,而且这两个输入的大小差不多,则预先排序的合并联接提供的性能与哈希联接相近。


  从上次我们分析来看,嵌套循环适合输入和输出都小的情况,那如果输入和输入都比较大情况下,使用合并算法什么情况下最优。


  最佳使用:


  合并联接本身的速度很快,但如果需要排序操作,选择合并联接就会非常费时。然而,如果数据量很大且能够从现有 B 树索引中获得预排序的所需数据,则合并联接通常是最快的可用联接算法。


  我们来测试一下,合并连接的最优情况:


  测试环境:表:workflowinfo1 约45万条 表workflowbase1 约4.5万条


  条件:workflowbase1中列id,creater都建立索引,workflowinfo1中workflowid建立了索引。


  如果两个联接输入并不小但已在二者联接列上排序(例如,如果它们是通过扫描已排序的索引获得的),则合并联接是最快的联接操作。如果两个联接输入都很大,而且这两个输入的大小差不多,则预先排序的合并联接提供的性能与哈希联接相近。~:(creater=4028814110830a1e01108fe379e60061’的workflowbase1表有1023条数据)


  测试语句:


  合并算法      







 select a.* from workflowbase1 a inner merge join dbo.workflowinfo1 b 
    on a.id=b.workflowid and a.creater=’4028814110830a1e01108fe379e60061’ 


  hash算法  







 select a.* from workflowbase1 a inner hash join dbo.workflowinfo1 b 
  on a.id=b.workflowid and a.creater=’4028814110830a1e01108fe379e60061’ 


  注意:这两条SQL和上一个嵌套循环的例子有区别,一个 select * 和一个是 select a.*

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

zping
zping

相关推荐

  • 在SQL Server 2005中实现网页传递变量(二)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 在SQL Server 2005中实现网页传递变量(一)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 走进SQL Server 2005:十大安全举措

    随着数据库系统被用作网络应用程序后台存储范围的持续扩大,对安全的关注也就越来越必要。虽然从发展的角度来看,围绕在SQL Server 2005的周围的还有不少的杂音,

  • SQL Server 2005:向系统表说再见

    在不使用任何的文档的情况下,编写一个查询,从SQL Server 2000系统表中抽取索引的列表,然后列举每个索引中的字段,并判断这个字段是否按照升序或者降序进行排序。