前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的哈希索引和原理研究测试

MySQL的哈希索引和原理研究测试

作者头像
星哥玩云
发布2022-08-16 14:36:02
2980
发布2022-08-16 14:36:02
举报
文章被收录于专栏:开源部署

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

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

create table test_hash(     fname varchar(100) not null default '',     lname varchar(100) not null default '',     index using hash(fname) ) engine=memory insert into test_hash values ('zhang','san'),('tao','shihan'),('li','si');

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

4.一张哈希表,存储着对应关系,槽编号是循序的,值数据行不是 槽(Slot) 值(Value) 2323 指向第2行数据 7437 指向第1行数据 8784 指向第3行数据

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索引

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档