您的位置:首页 > 博客中心 > 数据库 >

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;
gxlsystem.com,布布扣   下面看下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

热门排行

今日推荐

热门手游