MySQL中哈希表
也称为散列表 由直接寻址表改进而来.先看直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。加入某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,...,m-1}的关键字。同时假设没有两个元素具有相同的关键字
用一个数组(即直接寻址表)T[0...m-1]表示动态集合,其中每个位置(或称槽或桶)对应全域U中的一个关键字。图5-38说明了这个问题。槽K指向集合的一个关键字为k的元素。如果该集合没有关键字k的元素,则T【k】=NULL
直接寻址存在一个很明显的问题。如果域U很大,在一台典型计算机的可用容量的限制下,要在机器中存储大小为U的一张表T就有点不太实际,甚至不太可能。如果实际要存储的关键字集合K相对U来说很小,那么分配给T的大部分空间都要浪费掉
因此,哈希表出现了,在哈希方式下,该元素处于h(k)中,即利用哈希函数h,根据关键字k计算出槽的位置,函数h将关键字域U映射到哈希表T[0...m-1]的槽位中,如果5-39所示
哈希表技术很好的解决了直接寻址遇到的问题。但是这样还是有个小问题。如图5-39中所示两个关键字可能映射到同一个槽上。一般将这种情况称之为发生了碰撞。在数据库总一般采用最简单的碰撞解决技术,这种技术被称为链接法
在链接法中,把散列到同一槽中的所有元素都放在一个链表中,如果5-40所示,槽j中有一个指针,它指向所有散列到j的元素构成链表的头。如果不存在这样的元素,那么j为NULL
最后要考虑的是哈希函数,哈希函数h必须可以很好的散列,最好的情况是能避免碰撞发的发生。即使不能避免,也应该使碰撞在最小的成都下产生。一般来说,都将关键字转换成自然数,然后通过除法散列、乘法散列或全域散列来实现。数据库中一般采用触发散列的方法
在哈希函数的除法散列算法中,通过取k除于m的余数,将关键字k映射到m个槽的某一个去,即哈希函数为
h(k)=k mode m
MySQL中哈希表的更多相关文章
- mysql中的回表查询与索引覆盖
了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...
- mysql中把一个表的数据批量导入另一个表中
mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...
- js中哈希表的几种用法总结
本篇文章只要是对js中哈希表的几种用法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 1. <html> <head> <script type=" ...
- Java中哈希表(Hashtable)是如何实现的
Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...
- [转]net中哈希表的使用 Hashtable
本文转自:http://www.cnblogs.com/gsk99/archive/2011/08/28/2155988.html 以下是PetShop中DBHelper中的使用过程: //创建哈希表 ...
- C#中哈希表与List的比较
简单概念 在c#中,List是顺序线性表(非链表),用一组地址连续的存储单元依次存储数据元素的线性结构. 哈希表也叫散列表,是一种通过把关键码值映射到表中一个位置来访问记录的数据结构.c#中的哈希表有 ...
- C++ STL中哈希表Map 与 hash_map 介绍
0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华 ...
- C#中哈希表(HashTable)的用法详解以及和Dictionary比较
1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对, ...
- MySQL中的联结表
使用联结能够实现用一条SELECT语句检索出存储在多个表中的数据.联结是一种机制,用来在一条SELECT语句中关联表,不是物理实体,其在实际的数据库表中并不存在,DBMS会根据需要建立联结,且会在查询 ...
随机推荐
- STM32在程序运行过程中关闭定时器重新打开后定时器不工作的问题
问题:数码管显示程序放在定时TIM2中断函数里面扫描,想要实现在关闭某一功能的时候数码管不显示. 刚开始的想法是开关关闭,关闭定时器时钟:开关打开,打开定时器时钟:(但实验证明再次打开开关时定时器2却 ...
- chrome扩展(浏览器插件)开发实用教程
原创文章,转载请注明出处. 作者:简体字丶冯; QQ:564372931 1.Chrome能搞这些事情 (1) 操作浏览器中打开的页面DOM 这能做什么哪?譬如说你想修改页面DOM(DOM是什 ...
- CentOS设置程序开机自启动的方法
转自:http://www.centos.bz/2011/09/centos-setup-process-startup-boot/ 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. ...
- SPOJ QTREE3 lct
题目链接 题意: 给定n个点 q个询问 以下n-1行给出树边,点有黑或白色.初始化为白色 以下q行: 询问有2种: 1. 0 x 把x点黑变白,白变黑 2.1 x 询问Path(1,x)路径上第一个黑 ...
- 转载-android studio 各种问题
android studio 各种问题 1.dexDebug ExecException finished with non-zero exit value 2 全bug日志如下: (Error:Ex ...
- codeblocks如何watch指针
如果这个指针是指向一个一维数组,那么在watch窗口中右击并选择Dereference,会看到数组的第一个元素 如果这个指针是指向一个struct,那么在watch窗口中右击并选择Dereferenc ...
- string 的函数
string 有一个很好用到函数:substr(index). 去掉前index个字符.
- 收集别人的一些第三方(MARK)
本文是恢复数据,数据丢失前,原文由 @shiren1118 发表于 2012-12-28,对 Ruby 社区对 iOS 开发感兴趣的朋友来说,非常有价值. iosboilerplate这个选项是比较成 ...
- 使用nmap 验证多种漏洞
0x00 前言 大家都知道在平时的漏扫中,AWVS.APPSCAN.Netspark.webspectort等漏扫工具扫描出来的漏洞问题往往存在误报,这时我们就需要进行人工手动验证漏洞,这里我们有两种 ...
- JQuery IN ACTION读书笔记之一: JQuery选择器
本章关注两个通过$()使用的常用功能: 通过选择器选择DOM元素,创建新DOM元素. 2.1 选择操作元素 JQuery采用了CSS的语法,而CSS的语法你可能已经很熟悉了.当然,JQuery也做了扩 ...