【发布时间】:2013-11-02 04:23:25
【问题描述】:
我有一个关于在数据库中存储数据的简单但重要的问题。
假设一个网站有 100,000 个用户。这些用户可以互相成为朋友。
哪种存储方式比较理想
方法一:
- 在 USERS 表中创建一个
friends字段。类型:文本 - 保存所有朋友的ID,用
,连接他们。示例:用户 1 的朋友:2,3,4,5,6,... -
最差状态:所有用户都是好友,每个用户都有一个FULL TEXT好友字段。所以在php方面,应该用
,分隔这个字段,这需要一些过程。
方法B:
-
制作一个
friendship表+------+---------------------+ | uid | friend_id | +------+---------------------+ | 1 | 2 | | 1 | 3 | | 1 | 4 | | 1 | 5 | +------+---------------------+ 正如您在上面看到的,对于用户的每个朋友,我应该在表中插入一个新行。
- 最糟糕的状态:所有用户都是朋友,所以表中应该存储 100,000 x 100,000(不确定)行。
这两种方法中哪一种可以?性能和优化。
提前致谢。
【问题讨论】:
-
方法 A 太可怕了。不要对自己那样做。
-
方法 A 正在将一个字符串引入您的数据库,而数据库通常不能很好地处理字符串/数组(不能加入它们,很难带出朋友列表......等等) .方法 B 更可取,每个朋友关系 1 行。有趣的是,要读取方法 A 中的数据,您几乎必须将其转换为方法 B 已经存储的数据。
标签: php mysql sql performance optimization