MySQL hash索引 您所在的位置:网站首页 mysql哈希表 MySQL hash索引

MySQL hash索引

2023-03-27 05:29| 来源: 网络整理| 查看: 265

这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战

猫和老鼠.jpg

前言:   本篇文章 是我关于MySQL的第31篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。

书本有章节目录,游乐场有指南,商场有平面图。这些东西可以让我们的寻找目标时更加便捷快速。MySQL的索引也是这个目的,通过构建索引来让查询更加快速。MySQL的索引类似与存储引擎一样有多种。下面来一一介绍。

hash索引

前文介绍的B-Tree索引查找是从数据的根节点开始,往叶子节点去取值进行比较然后继续往叶子节点进行查找。

hash函数

hash函数可以通过将该数据引用数据地址转换为hash值,然后通过直接反查询来确定数据的位置。这样就不需要一个一个的来进行二分对比了。

根据Hash函数建立的表也被称之为hash表,哈希索引就是根据Hash表来建立的。

数据库中的每条(行)数据的会被转换为一个独特的Hash code(哈希码),该hash code有指向该数据的地址。将所有的hash code都放在索引中就构成了hash索引。

存储引擎中的应用

MySQL中支持hash函数的存储引擎有:Memory、NDB两种。并且这两种存储引擎也是支持B-Tree的。

在Memory存储引擎中: Hash索引是默认的索引类型。并且该索引实现时有类似于HashMap的表现。可以允许多行的hash码相同,存储时相同的Hash码的地址被放置在一条链表上。

自适应哈希值: 虽然InnoDB存储引擎不支持Hash索引。但是它会在使用频率很高的B-Tree索引上创建一个哈希索引。让这个B-Tree索引增加一些Hash索引的特性,例如快速查找等功能。这个是存储引擎自动行为,如果不需要可以将其关闭。

转换列为Hash值: 在实际的使用中,我们可能需要对例如url等一些比较长的数据做索引。这个时候建立B-Tree索引不仅会特别占空间,而且在查询比较时也会相对来说慢一些。

select * from customer where url='https://juejin.cn'; 复制代码

这个时候,我们可以增加一列url_hash用来存储对应url的hash值。对该列做索引,然后查询时可以查询该列。

alter table customer add column url_hash varchar(20) not null; select * from customer where url_hash=CRC32('https://juejin.cn'); 复制代码

当然这个hash值是需要维护的,我们可以新增触发器在表更新或者新增时对其值进行修改。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有