表连接的HASH算法以及应用

 

 

一、概述

在日常的数据库操作中,我们很经常用到如下操作:

select t1.*, t2.* from t1, t2 where t1.id = t2.id

这是一个显式的表连接操作,目的就是关联2张表,取出主键能够相互匹配的记录,

实现这类运算的算法通常有2,HASH连接和排序连接.其中又以HASH连接的使用最为频繁.

HASH连接是利用HASH算法能够将KEY键映射到一个唯一值,使得所有KEY键相同的映射的结果相同,KEY键不同的会映射到不同的结果上,来实现连接操作.

 

二、应用

我们有一个联系人列表,我们称它为原始联系人列表,用oriContactList 表示。

然后我们将这个列表做一个新增和删除的操作,得到一个新的联系人列表,用curContactList表示。

现在我们需要将这2个列表做一个对比操作,找出2个列表中没有变动的(既存在与oriContancListt中也存在与curContactList中)一个人员列表。

 

在传统的实现中,我们会考虑写一个双重循环,如:

 

 

 

比如oriContanctList 的大小是M, curContanctList 的大小是N 那么这个执行时间就是M*N

 

  我们也可以用HASH算法来实现这个需求:

 

我们先使用1HASHMAP来存放oriContanctList,我们把这个MAP命名为oriContanctMap

 

 

      

如果oriContanctList 的大小是M, curContanctList 的大小是N, oriContanctList放入HASHMAP需要M次运算 迭代curContanctList 需要N次运算,因为HASH算法本身需要的是常量时间,在运算量计算中可以忽略,那么这个算法需要的运算时间是 M+N

 

 

三、总结

HASH算法是个简单实用的算法,应用得当可以使程序逻辑更加清晰,高效.

除了用来做表连接的操作之外,HASH算法还可以用来做唯一值操作,分组。有兴趣研究的朋友的联系我的邮箱 jlr_6@foxmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值