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

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

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

<font size="3"></font>

 

 

     动态Hash的本质是Hash函数的设计,图中给出的动态hash函数只是论文中提到的一个例子。下面就具体解读下Mysql中的hash插入——my_hash_insert

 

my_hash_insert非深入解析

 

    首先给出my_hash_insert的源代码,代码在mysys/hash.c中。

 

my_bool my_hash_insert(HASH *info, const uchar *record)

{

    int flag;

    size_t idx,halfbuff,first_index;

    my_hash_value_type hash_nr;

    uchar *UNINIT_VAR(ptr_to_rec),*UNINIT_VAR(ptr_to_rec2);

    HASH_LINK *data,*empty,*UNINIT_VAR(gpos),*UNINIT_VAR(gpos2),*pos;

 

    if (HASH_UNIQUE & info->flags)

    {

        uchar *key= (uchar*) my_hash_key(info, record, &idx, 1);

        if (my_hash_search(info, key, idx))

            return(TRUE);               /* Duplicate entry */

    }

 

    flag=0;

    if (!(empty=(HASH_LINK*) alloc_dynamic(&info->array)))

        return(TRUE);               /* No more memory */

 

    data=dynamic_element(&info->array,0,HASH_LINK*);

    halfbuff= info->blength >> 1;

 

    idx=first_index=info->records-halfbuff;

    if (idx != info->records)                /* If some records */

    {

        do

        {

            pos=data+idx;

            hash_nr=rec_hashnr(info,pos->data);

            if (flag == 0)              /* First loop; Check if ok */

                if (my_hash_mask(hash_nr, info->blength, info->records) != first_index)

                    break;

            if (!(hash_nr & halfbuff))

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

推荐热点

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