首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要一个专家mysql的意见来做一个朋友系统

我需要一个专家mysql的意见来做一个朋友系统
EN

Stack Overflow用户
提问于 2009-08-10 12:39:27
回答 4查看 436关注 0票数 1

我需要你帮我设计一个朋友系统

mysql表:

friends_列表

  • auto_ id
  • friend_ id
  • user_ id
  • approved_ status

选项1=每当用户添加一个用户时,就有两个条目添加到DB中,然后我们就可以得到这样的朋友

代码语言:javascript
运行
复制
SELECT user_id FROM `friends_list` WHERE friend_id='$userId' and approved_status='yes'

选项2=我们为添加的每个朋友添加1个条目,然后得到如下所示的好友列表

代码语言:javascript
运行
复制
SELECT friend_id AS FriendId FROM `friends_list` WHERE user_id='$userId' and approved_status='yes'
UNION
SELECT user_id as FriendId FROM `friends_list` WHERE friend_id='$userId' and approved_status='yes'

在上面提到的在myspace、facebook这样的网站上交友的两种方法中,所有其他网站都这样做,以上两种方法中哪一种是最好的呢?

第一种方法使行数增加一倍,例如,有200万行朋友行的站点只会是第二个方法的100万行。

但是,union方法是否意味着有2个查询正在执行,所以在一个百万行表上有2个查询,而不是1个?

更新

我刚刚对6万名朋友进行了一些测试,这是结果,是的,表是索引的。

备选方案1,每个朋友有2个条目;

.0007秒

选项2,每个朋友使用UNION选择一个条目

.3100秒

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-10 12:44:44

备选案文1。

尽可能多地增加一个朋友。和选择所有的朋友相比,增加一个人是非常罕见的。当你每次呈现一个页面(在社交网站上)时,可能会做一些事情。

票数 1
EN

Stack Overflow用户

发布于 2009-08-10 12:49:42

如果您是在user_id和friend_id上索引,那么这两个语句在时间上应该是等价的--尽管最好是测试-- DB的语句可能会有令人惊讶的结果。但是,数据库可以看到UNION,它可以使用它来优化查询。

友谊总是相互的,具有相同的认可地位吗?如果是的话,我会选择第二个。如果它可以是单程或单独批准,那么你需要第一个,对吗?

票数 0
EN

Stack Overflow用户

发布于 2009-11-10 21:01:53

您使用的是哪个dbms?在执行联合查询时,MySQL总是使用额外的临时表。创建这些临时表会给查询带来一些开销,这可能是联合查询比第一个查询慢的原因。

你有没有想过把朋友和朋友分开?这将减少“朋友”表的内容,还可以从“朋友请求”表中删除已接受的请求,并减小表的大小。另一个好的优点是,在每个表中保留较少的列,因此更容易在它们上获得一个优化的索引。

我目前正在构建这个特性自己,这将是一个有趣的了解您的经验在这个问题上。

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

https://stackoverflow.com/questions/1254630

复制
相关文章

相似问题

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