哈希(hash)比树(tree)更快,索引结构为什么要设计成树型?

简介: 哈希(hash)比树(tree)更快,索引结构为什么要设计成树型?

加速查找速度的数据结构,常见的有两类:

哈希,例如HashMap,查询/插入/修改/删除的平均时间复杂度都是O(1); 树,例如平衡二叉搜索树,查询/插入/修改/删除的平均时间复杂度都是O(lg(n));

可以看到,不管是读请求,还是写请求,哈希类型的索引,都要比树型的索引更快一些,那为什么,索引结构要设计成树型呢

索引设计成树形,和SQL的需求相关。

对于这样一个单行查询的SQL需求: select * from t where name=”john”; 确实是哈希索引更快,因为每次都只查询一条记录。 所以,如果业务需求都是单行访问,例如passport,确实可以使用哈希索引。

但是对于排序查询的SQL需求: 分组:group by 排序:order by 比较:

哈希型的索引,时间复杂度会退化为O(n),而树型的“有序”特性,依然能够保持O(log(n)) 的高效率。 任何脱离需求的设计都是耍流氓。 多说一句,InnoDB并不支持哈希索引。

相关文章
|
3月前
|
存储 索引
什么是哈希表?它的工作原理是什么?
在我们的日常生活中,我们经常需要存储和查找各种信息,这些信息可能是电话号码,地址,或者是商品的价格等等。这些信息的存储和查找,就像是我们在一个巨大的仓库中存放和寻找物品。这个仓库就是数据结构,而其中一个最常用的,也是最高效的数据结构就是哈希表。
53 2
|
3月前
|
NoSQL 关系型数据库 MySQL
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
278 2
|
存储 数据库 索引
为什么索引底层用b+树不用b树
为什么索引底层用b+树不用b树
72 0
|
3月前
|
存储 前端开发 JavaScript
hash 的特性与运用
hash 的特性与运用
|
存储 Serverless
深入哈希结构
深入哈希结构
37 0
|
3月前
|
存储 算法 关系型数据库
MySQL索引 索引数据结构B+Tree、分类及使用、回表查询
MySQL索引 索引数据结构B+Tree、分类及使用、回表查询
148 0
|
11月前
|
存储 算法 容器
哈希结构(详解)
哈希结构(详解)
|
存储 算法 数据可视化
MySQL数据库 -- 索引结构 (B+ tree 与 Hash)
索引(index)是帮助MySQL高效获取数据的数据结构 , 在Mysql中有两个最常用的索引 -- B+tree索引 和 Hash索引 B-Tree(B树)是一种多叉路平衡查找树,相对于二叉树,B树每个节点可以有多个分支 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中
140 0
|
存储 数据库 索引
B-Tree索引是干什么的?底层原理是什么?
B-Tree索引是干什么的?底层原理是什么?
129 0
|
存储 机器学习/深度学习 缓存
针对存储排序文件过程中合并和压缩的算法LSM-Tree
LSM-Tree全称为Log-Structured Merge-Tree,日志结构合并树,它的架构分为内存部分和有序的磁盘部分,内存部分实现高速写,有序的磁盘部分实现高效查。
768 0
针对存储排序文件过程中合并和压缩的算法LSM-Tree