哈希表与哈希索引
哈希函数
所谓的哈希函数,就是根据这个函数和查找关键字key,可以直接确定查找值所在位置,而不需要一个个比较。
预先知道key所在的位置,直接找到数据,这样可以提升查找的效率。
hash函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表。
哈希函数构造举例
假设需要统计中国人口的年龄分布,以10为最小单元。今年是2018年,那么10岁以内的分布在2008-2018,20岁以内的分布在1998-2008……假设2018代表2018-2008直接的数据,那么关键字应该是2018,2008,1998……
那么可以构造哈希函数H(key)=(2018-key)/10=201-key/10
index | key | 年龄 | 人数(假设数据) |
---|---|---|---|
0 | 2018 | 0-10 | 200W |
1 | 2008 | 10-20 | 250W |
2 | 1998 | 20-30 | 253W |
3 | 1988 | 30-40 | 300W |
哈希索引
哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。
对于hash相同的,采用链表的方式解决冲突。类似于hashmap。因为索引的结构是十分紧凑的,所以hash索引的查询很快。