加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

[日常] MySQL的哈希索引和原理研究测试

发布时间:2020-12-11 23:59:08 所属栏目:MySql教程 来源:网络整理
导读:1.哈希索引 :(hash index)基于哈希表实现,只有精确匹配到索引列的查询,才会起到效果。对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个较小的整数值,并且不同键值的行计算出来的哈希码也不一样。 2.只有Memory

1.哈希索引 :(hash index)基于哈希表实现,只有精确匹配到索引列的查询,才会起到效果。对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个较小的整数值,并且不同键值的行计算出来的哈希码也不一样。

2.只有Memory存储引擎显式支持哈希索引,但是原理可以用在伪哈希索引上表结构如下:

3.假设会有这样一个哈希函数f(),该返回下面的哈希码整数值f('tao')=2323f('zhang')=7437f('li')=8784

5.select lname from test_hash where fname='tao'G;mysql先计算'tao'的哈希值,f('tao')=2323,然后根据该值在哈希索引表中查找对应的行,找到它指向的是第2行数据,直接查询第2行数据,判断fname是tao,确保正确

6.哈希冲突:不同的值得到了相同的哈希码,例如f('tao')=2323 f('wang')=2323,此时就是出现了哈希冲突当出现哈希冲突时,相同的数据会存储在链表中,遍历链表找到符合的。

7.特点:1)哈希索引只包含哈希码和指针,不存储数据字段值2)哈希索引数据并不是按循序存储的,因此无法用于排序3)因为要通过查询值计算确定的哈希码,所以哈希索引不支持部分匹配,不支持范围查找,只支持等值比较查询4)当哈希冲突很多的时候,效率会降低

在InnoDB存储引擎上,可以基于上面的原理,实现伪哈希索引,配合默认的B-Tree索引

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读