MySQL源码 数据结构hash
时间:2022-03-10 17:07
MySQL源码自定义了hash表,因为hash表具有O(1)的查询效率,所以,源码中大量使用了hash结构。下面就来看下hash表的定义: 【源代码文件include/hash.h mysys/hash.c】
typedef uint my_hash_value_type;下面看下hash表的函数: 1. _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset,
ulong size, size_t key_offset, size_t key_length,
my_hash_get_key get_key,
void (*free_element)(void*), uint flags) hash:初始化一个hash表 growth_size:初始化hash->array的增长大小 get_key:需要自定义一个从record获取key的方法,然后hash表针对这个key计算hash free_element:hash中的元素,只记录data的指针,需要自己定义free的方法 2. my_hash_free_elements(HASH *hash) 根据hash->elements的值,从array的0到elements来释放hash_link中的data。 最后hash->elements置为0。 3. my_hash_key(const HASH *hash, const uchar *record, size_t *length, my_bool first) 根据record和hash中定义的get_key方法来获取key值。 4. my_hash_first(const HASH *hash, const uchar *key, size_t length,
HASH_SEARCH_STATE *current_record) 根据key,length值来查找hash中的data。如果有hash冲突,就返回第一个。 5. my_hash_insert(HASH *info, const uchar *record) 插入record到hash表中: 1. 如果需要hash_unique,会先使用my_hash_search进行查询。 2. 然后计算cacl_hash&&hash_mask来计算位置。 6. my_hash_element(HASH *hash, ulong idx) 获取在hash表位置是idx的元素。 为完待续.....
MySQL源码 数据结构hash,布布扣,bubuko.com