美文网首页
Hash索引

Hash索引

作者: xx1994 | 来源:发表于2018-04-18 21:03 被阅读0次

hash索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。Memory引擎默认使用的是此种索引。

存储引擎对所有的索隐列计算出一个哈希码,将哈希码存储在索引中,同时哈希表中保存每个数据行的指针。这样,对于此种索引查找速度是非常快的。出现哈希值碰撞的话,索引会以链表的形式存放多个记录指针到同一个哈希条目中。

举个🌰:

name age
Jane 28
Peter 20
David 30

假设使用假想的哈希函数f(),生成对应的设想值:
f('Jane') = 2323
f('Peter') = 2456
f('David') = 2400

则哈希索引的数据结构如下:

槽(slot) 值(value)
2323 指向第1行指针
2400 指向第3行指针
2456 指向第2行指针

对于select * from user where `name` = 'Jane'那么直接先算Jane的哈希值,然后根据Jane的hash值2323去找到对应的第一行数据,查询速度相对于B-Tree索引是要快,但是也有一些局限:

  • hash索引中只有hash值和行数的指针,因此无法直接使用索引来避免读取行,但是因为这种索引读取快,性能影响不明显。
  • hash索引不是按照索引值顺序存储,无法使用于排序。
  • 不支持部分列匹配查找,这里面是使用索引列的全部内容来计算哈希值,例如(A,B)两列一起建索引,单纯使用A一列,那么就无法使用索引,B-Tree索引的话,因为支持匹配最左前缀,所以这种情况适用性偏好。
  • 哈希索引只支持等值查询,包括=、in()、<=>,不支持where age > 10 这种范围查询。
  • 哈希冲突很多的话,维护索引操作的代价也很高

相关文章

  • 二、b-tree索引和hash索引

    索引类型 b-tree索引和hash索引 1.hash索引(存在内存中) 在memory表默认是hash索引的理论...

  • Hash索引的底层原理是什么?

    MySQL 中的 Hash 索引 Hash 索引与 B+ 树索引的区别 Hash 索引不能进行范围查询,而 B+ ...

  • 哈希索引

    概述 数据库中经常用到的索引包括hash索引和B树索引。 定义 哈希索引(hash index)是基于hash表实...

  • 温故知新-MYSQL-索引基础

    概念 分类:主键索引、唯一索引、普通索引、组合索引、全文索引 算法:Btree,hash 区别:hash只能用于=...

  • MYSQL(05)-索引原理

    Mysql两种索引结构:B+Tree索引和Hash索引的区别和使用场景 Hash索引:使用hash散列的形式,已K...

  • Hash索引和B+树索引的区别

    Hash索引和B+树索引有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引...

  • MySQL Hash索引 vs B-Tree索引

    Hash 索引通过 hash 算法计算 hash 值,存储的索引应该也是 hash 值,查找时先计算查找字段的 h...

  • InnoDB存储引擎学习总结 第五章 索引

    常用命令 一 InnoDB存储引擎索引概述 InnoDB 支持 B+树索引、hash索引、全文索引,其中hash索...

  • 谈谈数据库索引

    数据库索引是一种辅助数据结构,它能加快数据提取速度。常见索引: Hash索引 B-tree索引 Hash索引 例如...

  • 索引相关

    1.MySQL中使用较多的索引有Hash索引,B+树索引2.InnoDB默认索引实现为:B+树 hash索引 1....

网友评论

      本文标题:Hash索引

      本文链接:https://www.haomeiwen.com/subject/bxbbkftx.html