Mysql源码学习——没那么简单的Hash
来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:17 点击:次
Hash链表的应用比较常见,其目的就是为了将不同的值映射到不同的位置,查找的时候直接找到相应的位置,而不需要传统的顺序遍历或是二分查找,从而达到减少查询时间的目的。常规的hash是预定义一定的桶(bucket),规定一个hash函数,然后进行散列。然而Mysql中的hash没有固定的bucket,hash函数也是动态变化的,本文就进行非深入介绍。
基本结构体
Hash的结构体定义以及相关的函数接口定义在include/hash.h和mysys/hash.c两个文件中。下面是HASH结构体的定义。
typedef struct st_hash {
size_t key_offset,key_length; /* Length of key if const length */
size_t blength;
ulong records;
uint flags;
DYNAMIC_ARRAY array; /* Place for hash_keys */
my_hash_get_key get_key;
void (*free)(void *);
CHARSET_INFO *charset;
} HASH;
成员名 | 说明 |
key_offset | hash时key的offset,在不指定hash函数的情况下有意义 |
key_length | key的长度,用于计算key值 |
blength | 非常重要的辅助结构,初始为1,动态变化,用于hash函数计算,这里理解为bucket length(其实不是真实的bucket数) |
records | 实际的记录数 |
flags | 是否允许存在相同的元素,取值为HASH_UNIQUE(1)或者0 |
array | 存储元素的数组 |
get_key | 用户定义的hash函数,可以为NULL |
free | 析构函数,可以为NULL |
charset | 字符集 |
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>