首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql 7列主键与1列md5唯一约束

问mysql 7列主键与1列md5唯一约束
EN

Stack Overflow用户
提问于 2009-10-14 17:33:49
回答 2查看 501关注 0票数 1

我有一个非常大的表,它目前大约有7000万行,并且每天都在以数千行的速度增长,这个模式现在每天都会翻转,所以我正在转移到一个分区表并重新设计ddl。

这个表基本上是一个非空整数的集合(有些是中的,有些是INT,有些是极小的),它需要对一组7列(表中的列更多)有一个唯一的约束,这是非常昂贵的,并且进一步增加了索引文件的大小,因为我从来没有通过它检索,我宁愿丢弃它,并以某种方式MD5/也许简单地连接这些值。还不知道。

问题是,唯一可以容纳如此大的唯一数字的列类型是varchar,我在质疑这个PK是否真的会更好?总之,由于我将有一个主键'part_key‘(site_id,id),所以我将不得不在设计分区时采用唯一约束…我确信这不是一个新问题,但我找不到任何比较这两个问题的基准/文档,有没有人有这个问题的经验?问题是,当我没有通过PK检索,或者只是唯一字段的散列值时,pk是否应该是整个8个字段(请记住,这个表可能有超过100M行)。S:检索主要由7列中的2列完成,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2009-10-14 19:42:33

在mysql获得分区修剪之前,我建议(gulp)将您的表反规范化为假分区。做一些事情,比如取第一个值的模32,然后做32个表。

mysql: 5.1.6及更高版本支持剪枝(http://dev.mysql.com/doc/refman/5.1/en/partitioning-pruning.html),所以我更强烈的建议是升级,然后让mysql为你处理分区,可能会使用7列中的一个哈希值。

票数 0
EN

Stack Overflow用户

发布于 2009-11-05 13:29:52

如果您可以找到一个与您的记录查找相匹配的散列,那么在每个分区上应用您的唯一约束应该不是什么大问题。较小的分区大小将使您的唯一约束更便宜。(如果我错了,这里肯定有人会教训我的)。

我被MySQL 5.0卡住了。我面临着手动对超过4000万行的几个表进行分区。我有一个可以在我的应用程序中散列的文档id:floor(docID/10)%100。这可以给我100个分区,这应该会使我的索引大小显著降低。我在表上执行了一个查询,并通过散列计算行数:

代码语言:javascript
复制
select count(docID), floor(docID/10)%100 as partno
from documents 
group by partno

幸运的是,我在第一次尝试时就发现了一个非常均匀的分布。你自己的公式会有所不同,我不知道你的分布会是什么样子。您是否担心您的独特约束在面对分区时将不起作用?

如果您能够利用MySQL分区,它将更加强大,并且对您的应用程序的影响更小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1567814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档