首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳MySql 'Friend‘性能表

最佳MySql 'Friend‘性能表
EN

Stack Overflow用户
提问于 2012-05-12 06:53:31
回答 1查看 128关注 0票数 1

我在一个社交类型的网络上有一个朋友表,我正在用这个结构构建:

代码语言:javascript
复制
uid binary(16) 
memberid int 
friendid int 
datefriended datetime 
isactive bool

这样,我只将关系和其他数据存储在一个表中。但是假设我需要获取我所有的朋友,无论我是好友( memberid )还是朋友( friends ),那么我需要从members表中获取用户名。查询是这样的:

代码语言:javascript
复制
SELECT m.name FROM members m
INNER JOIN friends f on m.memberid = f.friendid
WHERE f.memberid = 1

UNION ALL

SELECT m.name from members m
INNER JOIN friends f on m.memberid = f.memberid
WHERE f.friendid = 1

在我看来,如果你有很多用户和朋友在拉取这些数据,这可能是对数据库的资源密集型调用。我知道可以选择为每个朋友关系创建一对条目,但我正尝试在一次查询中做到这一点。关于如何改进查询或表结构以提高性能,您有什么想法吗?或者可能不会像我预想的那样糟糕?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-12 07:00:35

除了我上面建议您在friends.memberidfriends.friendidmembers.memberid上创建索引之外,您根本不需要UNION

代码语言:javascript
复制
SELECT m.name
FROM members AS m JOIN friends AS f
  ON (m.memberid, 1) IN ((f.friendid, f.memberid), (f.memberid, f.friendid))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10559546

复制
相关文章

相似问题

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