gpt4 book ai didi

mysql - 在 MySQL 中维护一个包含唯一值的大型表

转载 作者:可可西里 更新时间:2023-11-01 06:43:21 25 4
gpt4 key购买 nike

这可能是一种常见的情况,但我无法在 SO 或 Google 上找到具体的答案。

我在 MySQL 数据库上有一个很大的 friend 关系表(> 1000 万行),该表非常重要并且需要维护,以便没有重复的行。该表存储用户的 uid。该表的 SQL 是:

CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)

该表的工作方式是每个用户有大约 1000 个左右被发现并需要存储的“可能的 friend ”,但需要避免重复的“可能的 friend ”。

问题是,由于程序的设计,在一天的过程中,我需要向表中添加 100 万行或更多行,这些行条目可能是重复的,也可能不是。简单的答案似乎是检查每一行以查看它是否重复,如果不是,则将其插入表中。但随着表大小增加到 1 亿行、10 亿行或更多行(我预计很快就会这样),这种技术可能会变得非常慢。

维护这个唯一表的最佳(即最快)方法是什么?

我不需要手边总是只有唯一值的表。对于批处理作业,我每天只需要一次。在这种情况下,我是否应该创建一个单独的表来插入所有可能的行(包含重复行和所有行),然后在一天结束时创建第二个表来计算第一个表中的所有唯一行?

如果不是,长期保持这张表的最佳方式是什么?

(如果索引是最好的长期解决方案,请告诉我使用哪些索引)

最佳答案

(user, possiblefriend) 上添加唯一索引,然后使用以下之一:

确保在尝试插入重复行时不会出现错误。

您可能还想考虑是否可以删除自动递增的主键并使用 (user, possiblefriend) 作为主键。这将减小表的大小,并且主键将用作索引,从而使您不必创建额外的索引。

另见:

关于mysql - 在 MySQL 中维护一个包含唯一值的大型表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4152501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com