哈希娱乐 行业新闻 党建先锋

哈希游戏一种哈希连接的处理方法、存储介质与设备

发布时间:2025-06-01 13:02:41  浏览:

  哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏

哈希游戏一种哈希连接的处理方法、存储介质与设备

  计算以第一表构建哈希内表的代价,其中,所述第一表为预哈希连接的两个待连接表

  2.根据权利要求1所述的处理方法,其中,所述判断以所述第一表构建哈希内表是否需

  若所述第一表为在预设场景下的中间结果表,则确定以所述第一表构建哈希内表需要

  3.根据权利要求2所述的处理方法,其中,所述预设场景至少包括:CTE的递归侧和层次

  4.根据权利要求1所述的处理方法,其中,所述两个待连接表还包括除所述第一表之外

  5.根据权利要求4所述的处理方法,其中,所述第二表的统计信息为在所述第二表创建

  完成并插入数据后生成并存储在统计信息系统表中的统计数据,所述第二表的统计信息包

  所述根据所述第二表的统计信息与预设函数计算所述重新哈希的影响因子的步骤包

  获取与所述第二表的统计信息相对应的线性因子,其中,所述线性因子与所述第二表

  将所述第二表的元组数与所述第二表产生中间结果表的条件选择率的乘积与所述相

  对应的线性因子相乘并取整,将取整结果作为计算所述重新哈希的影响因子的结果。

  6.根据权利要求1所述的处理方法,其中,所述根据所述影响因子修正以所述第一表构

  将所述重新哈希的影响因子与计算得到的以所述第一表构建哈希内表的代价相乘的

  7.根据权利要求6所述的处理方法,其中,在所述计算以第一表构建哈希内表的代价的

  预先构建以所述第一表构建哈希内表、以所述第二表作为连接外表的第一路径,以及

  8.根据权利要求7所述的处理方法,其中,在所述根据所述影响因子修正以所述第一表

  根据修正后的以所述第一表构建哈希内表的代价,计算得到选择所述第一路径进行哈

  9.一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理

  10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运

  行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据权利要求1至8

  本发明涉及数据库技术,特别是涉及一种哈希连接的处理方法、存储介质与设备。

  当多表做内连接时,有一种连接方式叫哈希连接(Hash Join)。Hash Join是选择

  一个哈希内表来构造哈希表,然后对外表的每一行数据都去这个哈希表中查找是否有匹配

  的数据,其特点是将size较小的表做哈希处理后,尽可能一次性的读入内存,然后循环遍历

  外表每一条记录来跟哈希内表做哈希计算,看是否匹配上。跟其它连接方式(例如Nest

  Loop)相比,Hash Join的好处是对于内表来说,假如做了哈希全部读入内存的话,那么可以

  目前,优化器在Inner Hash Join的内外表选择算法为:通过交换内外表的连接顺

  序,分别构建两个路径,并分别计算两个路径的代价,并从中选择代价较小的路径作为计划

  在大多数情况下,内表做了哈希处理读入内存后,是不需要重新哈希(rehash)再

  读入的。然而,在某些场景下,比如CTE的递归侧或者层次查询的递归侧,会遇到需要rehash

  的情况。这是因为在两种场景下的连接原理是用基表和每次递归的中间结果表来做连接,

  而此时,如果优化器选择Hash Join这种连接方式,那么由于中间结果表通常比基表的size

  要小很多,那么就会选择中间结果表作为连接内表,而每次递归的中间结果表基本都是不

  同的。因此,每一次递归的Hash  Join都会由于被选作哈希内表的中间结果表与上次递归的

  Hash  Join的哈希内表不同,导致内表的rehash,进而导致作为外表的基表随着每一次递归

  的Join都要重新做全表扫描。而由于全表扫描是十分耗时的操作,这就导致了整个join操

  rehash带来的额外性能影响,以在计算Hash  Join的估算代价时加入rehash的影响因素的

  本发明的一个目的是要提供一种优化Hash  Join的内外表选择算法,以缩短Hash

  本发明一个进一步的目的是要提高计算Hash  Join路径代价的准确性,以进一步

  信息系统表中的统计数据,第二表的统计信息包括第二表的元组数和第二表产生中间结果

  根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储

  在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现

  本发明的处理方法,先计算以第一表构建哈希内表的代价,其中,第一表为预哈希

  连接的两个待连接表中的任一,再判断以第一表构建哈希内表是否需要重新哈希,并在确

  认以第一表构建哈希内表的这种路径下需要重新哈希的情况下,计算重新哈希的影响因

  子,最后根据影响因子修正以第一表构建哈希内表的代价。本发明的处理方法通过在构建

  哈希内表的代价时考虑rehash的影响,优化了Hash  Join的内外表选择算法,从而缩短了

  表,并在确认第一表为在预设场景下的中间结果表的情况下,确定以第一表构建哈希内表

  需要重新哈希,保证了判断是否需要哈希的判断结果的准确性,从而提高了计算Hash  Join

  路径代价的准确性,进而进一步优化了Hash  Join的内外表选择算法。

  附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些

  的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例

  所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本发明的范围

  为解决上述技术问题,本发明实施例提出一种预写式日志的处理方法。图1是根据

  本发明一个实施例的处理方法的流程示意图。参见图1所示,该处理方法一般性地可包括:

  步骤S102,计算以第一表构建哈希内表的代价,其中,第一表为预哈希连接的两个

  步骤S104,判断以第一表构建哈希内表是否需要重新哈希,若是,则执行步骤

  Join的内外表选择算法,即通过交换内外表的连接顺序,分别构建两个路径,并分别计算两

  个路径的代价,并从中选择代价较小的路径作为计划路径。也就是说,当两个表做Inner

  Hash  Join时,需要分别计算以两个待连接表中的每一个待连接表构建哈希内表的代价。另

  外,当多个表做Inner  Hash  Join时,也是需要先按照预定顺序的先对其中的两个待连接表

  进行Hash  Join,得到一结果表,再将得到的结果表与下一个待连接表进行Hash  Join。也就

  是说,本发明的优化器执行的Inner  Hash  Join的内外表选择算法是始终针对两个待连接

  表之间进行Hash  Join的。因此,为了便于说明,本发明将当前待计算代价的路径中的作为

  哈希内表的待连接表记作第一表,将两个待连接表中包括的除第一表之外的另一个待连接

  表记作第二表。也就是说,两个待连接表包括第一表和第二表,其中第一表是指两个待连接

  本实施例的处理方法,先计算以第一表构建哈希内表的代价,其中,第一表为预哈

  希连接的两个待连接表中的任一,再判断以第一表构建哈希内表是否需要rehash,并在确

  认以第一表构建哈希内表的这种路径下需要rehash的情况下,计算rehash的影响因子,最

  后根据影响因子修正以第一表构建哈希内表的代价。使用本实施例的处理方法,在计算构

  建哈希内表的代价时,考虑到rehash的影响。如果以第一表构建哈希内表后续不需要

  rehash,则不增加代价。如果以第一表构建哈希内表后续需要rehash,则在以第一表构建哈

  希内表的代价的计算结果的基础上,以rehash因子为倍数增加代价,从而实现了在构建哈

  希内表的代价时考虑rehash的影响,优化了Hash  Join的内外表选择算法,从而缩短了Hash

  在步骤S102之前,本实施例的处理方法还可以包括:预先构建以第一表构建哈希

  内表、以第二表作为连接外表的第一路径,以及以第二表构建哈希内表、以第一表作为连接

  在步骤S108之后,本实施例的处理方法还可以包括:根据修正后的以第一表构建

  哈希内表的代价,计算得到选择第一路径进行Hash  Join的第一代价;获取选择第二路径进

  行Hash  Join的第二代价;将第一代价与第二代价进行比对;根据比对结果,选取代价较小

  使用本实施例的处理方法,在进行内外表选择时,如果某一路径出现需要rehash

  的情况,则结合rehash的影响因子修正这一路径中构建哈希内表的代价的计算结果,并根

  据修正后的构建哈希内表的代价得到这一路径的代价,从而增加选择这一路径进行Hash

  Join的代价。也就是说,本实施例的处理方法通过在某一路径出现需要rehash的情况下,就

  增大这一路径的代价,从而改变这一路径和其他路径之间根据代价的大小进行比对的比对

  结果,以避免选用这一种后续需要rehash的路径进行Hash  Join,避免了作为外表的基表随

  着每一次递归的Join都要重新做全表扫描,从而缩短了Hash  Join的整体操作时间,以实现

  下面结合一些具体实施例,对某一路径是否会出现需要rehash的情况的判断方法

  和结合rehash的影响因子修正这一路径中构建哈希内表的代价的计算结果的修正方法分

  在一些实施例中,上述步骤S104的流程可以包括:判断第一表是否为在预设场景

  下的中间结果表;若第一表为在预设场景下的中间结果表,则确定以第一表构建哈希内表

  达式)的递归侧和层次查询的递归侧。在这两种预设场景中的任一种场景下,每次递归产生

  的中间结果表基本都是不同的,因此每一次递归的HashJoin都会导致内表的重新哈希

  (rehash)。因此,当确定第一表为在预设场景下的中间结果表时即可以确定以第一表构建

  哈希内表需要重新哈希,当确定第一表不是在预设场景下的中间结果表时即可以确定以第

  据库内核中通过特殊枚举值标识的表。并且特殊枚举值区别于其他类型的表具有的枚举

  值。在数据库内核中每种类型的表都有自己特有的枚举值表示表的类型,比如中间结果表、

  基本表以及索引表等不同类型的表的枚举值不同。由此,在一个具体实施例中,上述步骤

  S104中判断第一表是否为中间结果表的步骤可以包括:获取第一表的枚举值;判断第一表

  的枚举值是否为表示标的类型为中间结果表的特殊枚举值;若是,则确定第一表为中间结

  间结果表的情况下,确定以第一表构建哈希内表需要重新哈希,保证了判断是否需要哈希

  的判断结果的准确性,从而提高了计算Hash  Join路径代价的准确性,进而进一步优化了

  在本发明中的Hash  Join中,两个待连接表不可能同时为中间结果表,由此,若第

  一表为在预设场景下的中间结果表,则确定第二表为基表。基表是一种数据库中永久存储

  并实际存在的表,它是实际存储数据的逻辑表示。在此基础上,上述步骤S106的流程可以包

  括:获取第二表的统计信息;根据第二表的统计信息和预设函数计算rehash的影响因子

  (rehash_frac)。具体地,将计算得到的中间结果表的rehash的次数n作为本实施例中的

  rehash_frac。另外,基表的统计信息为在表创建完成并插入数据后生成并存储在统计信息

  系统表中的统计数据。并且表的统计信息可以包括基表的元组数N和基表产生中间结果表

  的条件选择率s,用于从多个角度描绘基表的各个属性列的数据分布情况,通过基表的统计

  信息可以完成表的代价估算和条件选择率。在一个具体实施例中,基表的元组数N为基表中

  除含属性名所在行以外的其他行的行数。另外,申请人根据预先实验得知,基表的统计信息

  与中间结果表成线性关系,其线性因子记作a。并且线性因子a与基表的统计信息的对应关

  系可以根据预先实验获得的结果预先配置并存储在数据库中。在此基础上,上述步骤S106

  中根据第二表的统计信息与预设函数计算rehash_frac的步骤可以包括:获取与第二表的

  统计信息相对应的线性因子a;将第二表的元组数N与第二表产生中间结果表的条件选择率

  s的乘积与相对应的线性因子a相乘并取整,将取整结果rehash的次数n作为计算rehash_

  在一个具体实施例中,上述步骤S106还可以具体执行为:获取第二表的统计信息,

  第二表的统计信息包括第二表的元组数N和第二表产生中间结果表的条件选择率s;获取与

  第二表的统计信息相对应的线性因子a;根据预设的rehash的次数n计算公式计算rehash的

  次数n,其中预设的rehash的次数n计算公式为n=[a×N×s];将计算得到的n作为rehash_

  在一些实施例中,上述步骤S108的流程可以包括:将rehash_frac与计算得到的以

  第一表构建哈希内表的代价相乘的乘积,作为修正后的以第一表构建哈希内表的代价。也

  就是说,在以第一表构建哈希内表的代价的计算结果的基础上,以rehash因子为倍数增加

  这一代价,从而实现了在构建哈希内表的代价时考虑rehash的影响,以实现Hash  Join的内

  图2是根据本发明另一个实施例的处理方法的流程示意图。下面结合图2对本实施

  例的流程步骤进行具体说明。在本实施例中,哈希连接的处理方法可以为优化器在Inner

  Hash  Join的内外表选择算法。下面结合图2对本实施例的流程步骤进行具体说明。

  步骤S202,通过交换内外表的连接顺序,分别构建两个路径。需要说明的是,每个

  步骤S208,判断是否属于需要反复rehash的情况,若是,则执行步骤S210,若否,则

  执行步骤S216。具体地,属于需要反复rehash的情况可以包括:当前内表是层次查询的递归

  rehash的次数n,n=[a×N×s],其中,N表示基表的元组数,s表示基表产生中间结果表的条

  步骤S214,将rehash_frac与步骤S206中计算得到的通过当前路径构建内表哈希

  步骤S218,获取Inner  Hash  Join的另一路径的代价计算结果,将当前路径的代价

  步骤S220,根据比对结果,选取代价较小的路径作为Inner  Hash  Join的计划路

  构建哈希内表的代价与计算得到的Inner  Hash  Join的内外表启动代价根据预设运算公

  要保证根据预设运算公式可以完成Inner  Hash  Join的剩余代价计算即可。同时,在计算第