我在使用这种结构构建的社交类型网络上有一个朋友表:
uid binary(16)
memberid int
friendid int
datefriended datetime
isactive bool
这样,我将关系和其他数据仅存储在一个表中。但是说我需要得到我所有的朋友,无论我是friender(memberid)还是friendee(friendid),那么我需要从members表中获取用户名。查询是这样的:
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
如果您有很多用户和朋友提取这些数据,这对我来说似乎是对数据库的资源密集型调用。我知道可以选择为每个朋友关系设置一对条目,但我试图在一次查询中执行此操作。您对如何改进查询或表结构以提高性能有任何想法。或者也许它不会像我预想的那么糟糕?