Mysql 索引结构 hash 有序数组 除了最常见的树形索引结构,Hash索引也有它的独到之处。 Hash算法 Hash本身是一种函数,又被称为散列函数。 它的思路很简单:将key放在数组里,用一个hash算法把不同
除了最常见的树形索引结构,Hash索引也有它的独到之处。
Hash本身是一种函数,又被称为散列函数。
它的思路很简单:将key放在数组里,用一个hash算法把不同的key转换成一个确定的value,然后放在这个数组的指定位置
相同的输入永远可以得到相同的输出
具体的算法有MD5、SHA1、SHA2、SHA3
Hash冲突:不同的key得到了相同的value
当出现Hash冲突,可以在冲突发生的位置跟一个链表
索引使用的数据结构的特性会让索引也具有不同的特性:
Hash索引只适用于等值查询的场景,区间查询速度很慢
因为经过hash函数处理后,即便是原本有序的输入,最后存放的位置也会变为无序的。
检索速度很快
索引检索一次到位,而不需要想B+树那样从根节点访问到叶子节点。不过在有大量重复值得情况下,hash索引的效率极低,因为要频发地处理Hash冲突。
无法完成排序,模糊查询
因为它们本质上是范围查询
不支持多列联合索引的最左匹配原则
对于Hash索引的联合索引,是将联合索引字段值相捆绑然后计算Hash值的,无法利用对单一字段的Hash值
Hash索引的用途:
mysql的Memory存储引擎支持Hash存储
如果我们需要用到查询的临时表时,就可以选择 Memory 存储引擎,把某个字段设置为 Hash 索引,比如字符串类型的字段,进行 Hash 计算之后长度可以缩短到几个字节。当字段的重复度低,而且经常需要进行等值查询的时候,采用 Hash 索引是个不错的选择
InnoDB自适应Hash索引
当某个索引值使用非常频繁的时候,它会在 B+ 树索引的基础上再创建一个 Hash 索引,这样让 B+ 树也具备了 Hash 索引的优点。
如果我们使用有序数据作为索引结构的话,那么
因此有序数组的结构只适合静态存储引擎,如果我们要存储以某种有序编号为序的不轻易增删的历史数据,我们可以使用有序数组作为索引结构。
--结束END--
本文标题: MySQL 索引结构 hash 有序数组 - G
本文链接: https://www.lsjlt.com/news/7004.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-11
2024-05-11
2024-05-11
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0