[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

SQL Server 2005合并联接算法

作者: zping,  出处:博客园, 责任编辑: 徐菲, 
2008-08-26 08:10
  合并联接本身的速度很快,但如果需要排序操作,选择合并联接就会非常费时。然而,如果数据量很大且能够从现有 B 树索引中获得预排序的所需数据,则合并联接通常是最快的可用联接算法。

  简介:

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

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

  最佳使用:

  合并联接本身的速度很快,但如果需要排序操作,选择合并联接就会非常费时。然而,如果数据量很大且能够从现有 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.*

共3页。 1 2 3 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅