这可能是一种常见情况,但我无法在SO或Google上找到具体答案.
我在MySQL数据库上有一个大表(> 1000万行)的朋友关系非常重要,需要维护,以便没有重复的行.该表存储用户的uid.该表的SQL是:
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
Run Code Online (Sandbox Code Playgroud)
该表的工作方式是每个用户有大约1000个"可能的朋友"被发现并需要存储,但需要避免重复的"可能的朋友".
问题是,由于程序的设计,在一天的过程中,我需要向表中添加100万行或更多行,这些行可能是或不是重复的行条目.简单的答案似乎是检查每一行以查看它是否重复,如果没有,则将其插入表中.但是随着表格大小增加到1亿行,10亿行或更高(我希望它很快),这种技术可能会变得非常慢.
维护这个独特的桌子的最佳(即最快)方法是什么?
我不需要总是只有一个只有唯一值的表.我只需要每天一次的批处理作业.在这种情况下,我应该创建一个单独的表,只插入所有可能的行(包含重复的行和所有行),然后在一天结束时,创建第二个表来计算第一个表中的所有唯一行?
如果没有,这个表长期的最佳方式是什么?
(如果索引是最好的长期解决方案,请告诉我使用哪些索引)
添加一个唯一索引(user, possiblefriend)然后使用以下之一:
确保在尝试插入重复行时不会出现错误.
您可能还需要考虑是否可以删除自动递增主键并将其用(user, possiblefriend)作主键.这将减小表的大小,并且主键将用作索引,从而使您不必创建额外的索引.
也可以看看: