河量会员表应该如何分表?按26字母首字母的话会出现不均匀现象!

lsf82 2005-04-03 06:32:49
有一个百万条会员记录的表,在会员登入时,检索会员是否存在及其密码是否正确。
如果不进行分表,则每个会员登入时需要花10-20的检索时间。
之前用用户ID的首字母进行分表后。查询速度明显提高,但是存在数量不均匀现象
比如l开头的就有50万条,而e开头的只有5万条。
有没有其他算法可以实现均匀的分表啊??
各位大虾给点建议啊。。。或者其他任何解决方案都可以。

...全文
111 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsf82 2005-04-03
  • 打赏
  • 举报
回复
加我MSN:argu@argu.net或QQ:13536635 吧?我们讨论一下
晨星 2005-04-03
  • 打赏
  • 举报
回复
使用加法,如果使用C/C++语言的话,可以这样:

int SimpleHash(const char* id)
{
const char *p = id;
int code = 0;
while(*p)
{
code += *p++;
}

return code % 32;
}
晨星 2005-04-03
  • 打赏
  • 举报
回复
偶又不知道你使用什么语言看法。
我估计应该可以了。按位异或,应该能够获得较为均匀的概率分布。
lsf82 2005-04-03
  • 打赏
  • 举报
回复
你能不能尝试性的写一下看看??可能并不能满足均衡呀!
晨星 2005-04-03
  • 打赏
  • 举报
回复
或者所有的字母从头到位按位抑或一遍也行。
晨星 2005-04-03
  • 打赏
  • 举报
回复
那俺说的那种最简单的不能满足要求么?
晨星 2005-04-03
  • 打赏
  • 举报
回复
哦。
lsf82 2005-04-03
  • 打赏
  • 举报
回复
恩。。我记得以前有过相关的帖子上面有介绍,可是现在找不到了:(
晨星 2005-04-03
  • 打赏
  • 举报
回复
晕死了,怎么把“是”打成“屎”了。-_-*
晨星 2005-04-03
  • 打赏
  • 举报
回复
呵呵,MD5虽然也屎散列算法,主要用在安全要求高的场合。
现在我们的这种需要又不是为了安全,主要是为了均匀一点,自己“发明”一种简单的就够了。:P
lsf82 2005-04-03
  • 打赏
  • 举报
回复
我要的就是这种散列算法啊。。本来是想用md5,不过觉得md5可能消耗比较打。。
毕竟不是为了加密而去进行运算的。。想找个简单点的
晨星 2005-04-03
  • 打赏
  • 举报
回复
可不可以按照某种散列值分表?
比如最简单的,分成32个表,在程序中把组成ID的每一个字母的Asccii码加起来,然后除以32取余数,是几就对应第几号的表。
我想这样会均匀地多。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧