WEB开发网
开发学院数据库MSSQL Server 通往性能优化的天堂-地狱 JOIN方法说明 阅读

通往性能优化的天堂-地狱 JOIN方法说明

 2007-06-27 09:45:04 来源:WEB开发网   
核心提示: 一般情况下,如果无法满足nested loop条件,通往性能优化的天堂-地狱 JOIN方法说明(7),会考虑对merge join方法的评估,merge join的选择,则这些hash buckets使用链表数据结构连接起来,当整个build input的table处理完毕后,主要是考虑两

一般情况下,如果无法满足nested loop条件,会考虑对merge join方法的评估。merge join的选择,主要是考虑两个输入的数据量,以及分别对应于关联字段是否能够命中索引。例如tableA join tableB,关联字段在两个表中都能命中索引,数据量超过了nested loop的选择范围,则会考虑使用merge join方法。当然,如果tableA和tableB的数据量过大导致评估出来的成本过高,则会放弃merge join而评估hash join了。

使用inner merge join或者option(merge join)强制使用merge join方法。

3. hash join

hash join有两个输入:build input(也叫做outer input)和probe input(也叫做inner input),不仅用于inner/left/right join等,象union/group by等也会使用hash join进行操作,在group by中build input和probe input都是同一个记录集。

同nested loop,在执行计划中build input位于上方,probe input位于下方。

hash join操作分两个阶段完成:build(构造)阶段和probe(探测)阶段。

Build阶段

这个阶段主要构造hash table。在inner/left/right join等操作中,表的关联字段作为hash key;在group by操作中,group by的字段作为hash key;在union或其它一些去除重复记录的操作中,hash key包括所有的select字段。

Build操作从build input输入中取出每一行记录,将该行记录关联字段的值使用hash函数生成hash值,这个hash值对应到hash table中的hash buckets(哈希表目)。如果一个hash值对应到多个hash buckts,则这些hash buckets使用链表数据结构连接起来。当整个build input的table处理完毕后,build input中的所有记录都被hash table中的hash buckets引用/关联了。

上一页  2 3 4 5 6 7 8 9  下一页

Tags:通往 性能 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接