mysql的哈希函数_MySQL中哈希表

也称为散列表 由直接寻址表改进而来.先看直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。加入某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,...,m-1}的关键字。同时假设没有两个元素具有相同的关键字

用一个数组(即直接寻址表)T[0...m-1]表示动态集合,其中每个位置(或称槽或桶)对应全域U中的一个关键字。图5-38说明了这个问题。槽K指向集合的一个关键字为k的元素。如果该集合没有关键字k的元素,则T【k】=NULL

f69d6307bcd178d0e491470d858eb4fd.png

直接寻址存在一个很明显的问题。如果域U很大,在一台典型计算机的可用容量的限制下,要在机器中存储大小为U的一张表T就有点不太实际,甚至不太可能。如果实际要存储的关键字集合K相对U来说很小,那么分配给T的大部分空间都要浪费掉

因此,哈希表出现了,在哈希方式下,该元素处于h(k)中,即利用哈希函数h,根据关键字k计算出槽的位置,函数h将关键字域U映射到哈希表T[0...m-1]的槽位中,如果5-39所示

6cf6ff9217bbd07987dc9edeaf983483.png

哈希表技术很好的解决了直接寻址遇到的问题。但是这样还是有个小问题。如图5-39中所示两个关键字可能映射到同一个槽上。一般将这种情况称之为发生了碰撞。在数据库总一般采用最简单的碰撞解决技术,这种技术被称为链接法

在链接法中,把散列到同一槽中的所有元素都放在一个链表中,如果5-40所示,槽j中有一个指针,它指向所有散列到j的元素构成链表的头。如果不存在这样的元素,那么j为NULL

9e429c0a34b36a563b1e055572f07c81.png

最后要考虑的是哈希函数,哈希函数h必须可以很好的散列,最好的情况是能避免碰撞发的发生。即使不能避免,也应该使碰撞在最小的成都下产生。一般来说,都将关键字转换成自然数,然后通过除法散列、乘法散列或全域散列来实现。数据库中一般采用触发散列的方法

在哈希函数的除法散列算法中,通过取k除于m的余数,将关键字k映射到m个槽的某一个去,即哈希函数为

h(k)=k mode m

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的哈希索引是一种用于加快数据检索速度的索引结构。哈希索引使用哈希函数将索引键映射到一个固定大小的哈希值,然后将哈希值与存储在内存哈希表进行匹配,以快速定位到所需的数据行。哈希索引的搜索时间复杂度为O(1),因为它直接通过哈希值进行查找,而不需要像B树索引那样进行逐层的比较。这使得哈希索引在某些特定场景下具有较高的检索效率。 然而,需要注意的是,MySQL的哈希索引并非适用于所有情况。哈希索引的主要限制是它只支持等值查询,而不支持范围查询或排序操作。此外,哈希索引对于频繁的插入和删除操作也不太友好,因为这些操作可能导致哈希冲突,进而影响索引的性能。 此外,MySQL还引入了自适应哈希索引的概念。自适应哈希索引是一种动态索引结构,它根据查询模式自动选择是否使用哈希索引。自适应哈希索引可以根据实际查询情况动态地创建和删除哈希索引,以提高查询性能。但是,创建哈希索引也会消耗一定的资源,因此需要根据具体的衡量参数来决定是否打开或关闭自适应哈希索引。 总结来说,MySQL的哈希索引是一种用于加快数据检索速度的索引结构,它具有快速的搜索效率和较低的磁盘IO开销。然而,哈希索引只适用于等值查询,并且对于频繁的插入和删除操作不太友好。自适应哈希索引是一种动态索引结构,可以根据查询模式自动选择是否使用哈希索引,以提高查询性能。 #### 引用[.reference_title] - *1* *2* *3* [Mysql哈希索引](https://blog.csdn.net/Reggie0202/article/details/122238967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值