这可能是一种常见情况,但我在 SO 或 Google 上找不到具体答案。
我在 MySQL 数据库上有一个包含朋友关系的大表(>1000 万行),该表非常重要,需要维护以确保没有重复的行。该表存储用户的 uid。该表的 SQL 是:
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
该表的工作方式是每个用户有大约 1000 个左右的“可能的朋友”被发现并需要存储,但需要避免重复的“可能的朋友”。
问题是,由于程序的设计,在一天的时间里,我需要向表中添加 100 万行或更多行,这些行可能是重复的行条目,也可能不是重复的行条目。简单的答案似乎是检查每一行以查看它是否重复,如果不是,则将其插入表中。但是随着表大小增加到 1 亿行、10 亿行或更高(我预计很快会实现),这种技术可能会变得非常缓慢。
维护这个独特表的最佳(即最快)方法是什么?
我不需要总是有一张只有唯一值的表。对于批处理作业,我只需要每天一次。在这种情况下,我是否应该创建一个单独的表来插入所有可能的行(包含重复行和所有行),然后在一天结束时创建第二个表来计算第一个表中的所有唯一行?
如果没有,长期使用这张桌子的最佳方式是什么?
(如果索引是最好的长期解决方案,请告诉我要使用哪些索引)