数据库-4 Hash算法
来源:互联网 发布:网络理财 富通贷 编辑:程序博客网 时间:2024/06/05 17:52
Hash算法: 以时间换空间。
散列函数是Hash算法的核心。
以除法求余散列法和乘法散列为例:
除法求余散列:
全域K=2000, 碰撞值3
m=2000/3 ≈666,取666左右的素数701.
得散列函数 h(k) = k mod 701
散列后702和1得到同一个值,在存放时需要进行额外处理。
结果散列后最大值是701,相比散列前的最大值2000,节省空间。
但在查找时会额外消耗时间,同一个Hash值对应多个原始值,可能需要进行额外查找,才能得到查找的值。
除法求余散列建议除数采用素数。
乘法散列 h(k) = floor( m(kA mod 1) )
关键字k乘以常数A(0.1),取出小数部分,再乘以m,取整数部分
A值建议取(√5 -1)/2 黄金分割值
如 k=123 456 p=14 m=2^14=16384 w=32 A=((√5-1)/2*2^32)/2^32
k*A=(76300 X 2^32) + 17612864
17612864/2^32 * 2^14≈ 67
得到Hash值 67
A值先乘以2^32然后在除以2^32,是为了保证小数点后的计算足够精确, 采用2的某次方 是为了方便运算,直接对存储的二进制数进行左移和右移即可。
全域散列:
解决散列中可能出现的散列结果不平均的情况。
Oracle中的应用
1. Hash join
多表关联时,将关联列(关联条件 a.col= b.col )的值做Hash处理,再做循环匹配。
2.解析
语法/语义/权限检查
将整条SQL做hash处理(会对字符串进行数值化处理 如字符 pt ASCII字符集中p=112,t=116 则pt=(112X128)+116 =14452)
一个Hash值可能对应多个SQL文本及执行计划
进行逐条匹配,有则取,没有则重新生成执行计划并保存
(实际做Hash join和解析时,Hash处理的方法会因为问题的实际情况变复杂,只是基本思路如此)
3.Hash分区
4.Hash表
参考内容:
Hash算法 算法导论中文版 11章 散列表 P139
Hash Join 基于Oracle的SQL优化 崔华 P52
解析 基于Oracle的SQL优化 崔华 P205
- 数据库-4 Hash算法
- 数据库水平分表(hash算法)
- hash表、hash算法
- hash 算法
- Hash算法
- hash算法
- Hash算法
- Hash算法
- Hash算法
- Hash算法
- Hash算法
- hash算法
- HASH 算法
- HASH算法
- hash算法
- Hash算法
- Hash算法
- Hash 算法
- 四大趋势六大场景,麦肯锡预测汽车行业新革命
- [Asp.net]DataTable排序
- org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet
- 【折半搜索】BZOJ2679(Usaco2012 Open)[Balanced Cow Subsets]题解
- Oracle中concat与||区别(以及与mysql中concat函数区别)
- 数据库-4 Hash算法
- codeforces
- hdu 5135 Little Zu Chongzhi's Triangles(贪心+求三角形面积)
- 结构体
- 2018 年,AI 芯片也许会出现在每一款旗舰智能手机上
- 更值得购买的全面屏手机,vivo X20全通路首销告捷
- Qualcomm骁龙和vivo共同携手NBA 开启体育跨界新势力
- 亚马逊Echo新品技术解读,如何选择合适的麦克风阵列?
- 文章标题