这可能是一种常见情况,但我无法在SO或Google上找到具体的答案。在MySQL中维护一个唯一值的大表格
我有一个很大的表(> 1000万行)的MySQL数据库上的朋友关系,这是非常重要的,需要保持这样,没有重复的行。该表存储用户的uid。表的SQL是:
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
表的工作方式是每个用户大约有1000左右的“可能朋友”被发现并需要存储,但重复“可能朋友”需避免。
问题是,由于程序的设计,在一天的过程中,我需要向表中添加100万行或更多的行,可能或不是重复的行条目。简单的答案似乎是检查每一行以查看它是否重复,如果不是,则将其插入表中。但是,随着表格大小增加到1亿行,10亿行或更多(我预计它很快),这种技术可能会变得非常缓慢。
什么是最好的(即最快)的方式来维护这个独特的表?
我并不需要一张只有唯一值的表格。我只需要每天一次的批量作业。在这种情况下,我应该创建一个插入所有可能行(包含重复行和所有行)的单独表,然后在一天结束时创建第二个表来计算第一个表中的所有唯一行吗?
如果不是,该表格的长期最佳方式是什么?
(如果指标是最好的长期解决方案,请告诉我要使用的索引)
问题,做u需要查询表'possiblefriends'?我只是想你可能会根据用户分割桌子,当你查询时它将会有所帮助,但是它可能会在长时间内变成维护灾难 – ajreal 2010-11-11 09:12:56
@ajreal:你的意思是每个用户都有自己的桌子吗?将会有近一百万用户左右,所以这可能会使事情变得非常复杂。 – eric 2010-11-11 10:04:34
是的,这是我提到它可能会变成维护灾难,如何使用每桌约1k用户?想象一下,你把所有的数据放在一张桌子上,发生桌子坠毁,无法恢复,甚至可以恢复,你能忍受多久的停机时间? – ajreal 2010-11-11 12:48:50