科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道解析:带你轻松的了解究竟什么是哈希联接

解析:带你轻松的了解究竟什么是哈希联接

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

哈希联接有两种输入:生成输入和探测输入。查询优化器指派这些角色,使两个输入中较小的那个作为生成输入。

作者:赛迪网 yashi 来源:天新网 2008年3月27日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

了解哈希联接

哈希联接有两种输入:生成输入和探测输入。查询优化器指派这些角色,使两个输入中较小的那个作为生成输入。

哈希联接可用于许多类型的集合匹配操作:内联接,左向外联接、右向外联接和完整外联接,左向半联接和右向半联接、交集、联合和差分。而且,哈希联接的变化形式能够进行重复项删除和分组操作(如 SUM(salary) GROUP BY department)。这些修改对生成和探测角色只使用一个输入。

与合并联接相似,只有当联接谓词中至少有一个等效 (WHERE) 子句时才能使用哈希联接。然而,联接一般用于重组合由主键和外键之间的等效谓词表达的关系,因此大多数联接至少有一个等效子句。用等效谓词表达的列集合称为哈希键,因为这些列有助于哈希函数。还可以有附加的谓词,并且可以将这些谓词取值为驻留谓词以与哈希值比较分开。哈希键可以是表达式,只要能从单个行中的列对其进行排它计算。在分组操作中,按列表分组的列是哈希键。在交集等集合操作中以及删除复制项时,哈希键由所有列组成。

内存中的哈希联接

哈希联接先扫描或计算整个生成输入,然后在内存中生成哈希表。根据为哈希键计算出的哈希值,将每行插入哈希存储桶。如果整个生成输入比可用内存少,则可以将所有行都插入哈希表中。生成阶段后接着是探测阶段。一次一行地对整个探测输入进行扫描或计算,并为每个探测行计算哈希键的值,扫描相应的哈希存储桶并生成匹配项。

Grace 哈希联接

如果生成输入不适合内存,哈希联接将分步进行。每一步都包括生成阶段和探测阶段。首先,消耗整个生成和探测输入并(使用哈希键上的哈希函数)将其分区为多个文件。这类文件的数目称为分区输出端。通过使用哈希键上的哈希函数,可以保证任意两个联接记录必在相同的文件对中。因此,联接两个大输入的任务简化为相同任务的多个较小的实例。然后将哈希联接应用于每对分区文件。

递归哈希联接

如果生成输入非常大,以至于标准外部合并排序的输入需要多个合并级别,则需要多个分区步骤和多个分区级别。如果只有某些分区较大,则只需对这些分区使用附加的分区步骤。为使所有的分区步骤尽可能快,将使用大的异步 I/O 操作以便单个线程就能使多个磁盘驱动器繁忙工作。

说明 如果生成输入较大但并不比可用内存大很多,则内存中的哈希联接和 Grace 哈希联接的元素将合并成一个步骤,产生混合哈希联接。

在优化过程中并不总能确定使用什么样的哈希联接。因此,Microsoft® SQL Server™ 2000 开始时使用内存中的哈希联接,然后根据生成输入的大小逐渐转换到 Grace 哈希联接和递归哈希联接。

如果优化器错误地预计两个输入中哪个较小并由此确定哪个作为生成输入,生成角色和探测角色将动态逆转。哈希联接确保使用较小的溢出文件作为生成输入。这一技术称为角色逆转。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章