您现在的位置:主页 > 技术中心 > 数据库技术 > Mysql

Mysql源码学习——没那么简单的Hash(4)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:17 点击:

{

  DBUG_ENTER("my_hash_init");

  DBUG_PRINT("enter",("hash: 0x%lx  size: %u", (long) hash, (uint) size));

 

  hash->records=0;

  hash->key_offset=key_offset;

  hash->key_length=key_length;

  hash->blength=1;

  hash->get_key=get_key;

  hash->free=free_element;

  hash->flags=flags;

  hash->charset=charset;

  DBUG_RETURN(my_init_dynamic_array_ci(&hash->array,

                                       sizeof(HASH_LINK), size, growth_size));

}

<font size="3">   可以看到,_my_hash_init函数主要是初始化HASH结构体和hash->array(DYNAMIC_ARRAY结构体)。</font>

动态HASH函数

 

<font size="3">   我们首先来看下hash函数的定义:</font>

static inline char*

my_hash_key(const HASH *hash, const uchar *record, size_t *length,

            my_bool first)

{

  if (hash->get_key)

    return (char*) (*hash->get_key)(record,length,first);

  *length=hash->key_length;

  return (char*) record+hash->key_offset;

}

 

static uint my_hash_mask(my_hash_value_type hashnr, size_t buffmax,

                         size_t maxlength)

{

  if ((hashnr & (buffmax-1)) < maxlength) return (hashnr & (buffmax-1));

  return (hashnr & ((buffmax >> 1) -1));

}

 

 

my_hash_key参数 说明
hash HASH链表结构
record 带插入的元素的值
length 带插入元素的值长度
first 辅助参数
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Tool
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql安装笔记
  • Mysql主主复制架构配置
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司