【发布时间】:2013-01-09 09:25:04
【问题描述】:
我的表中有 40 多列,我必须添加更多字段,例如当前城市、家乡、学校、工作、大学、拼贴……
这些用户数据将为许多匹配的用户提取,这些用户是共同的朋友(与其他用户朋友加入朋友表以查看共同的朋友)并且未被阻止并且还不是用户的朋友。
上面的请求有点复杂,所以我认为将额外的数据放在同一个用户表中以快速访问是个好主意,而不是向表中添加更多的连接,这会降低查询速度。但我想听听你的建议
我的朋友告诉我添加额外的字段,这些字段不会作为序列化数据在一个字段上进行搜索。
ERD 图:
- 我的当前表:http://i.stack.imgur.com/KMwxb.png
- 如果我加入更多表格:http://i.stack.imgur.com/xhAxE.png
一些建议
- 这个表和列没有问题
- 遵循这种方法MySQL: Optimize table with lots of columns - 将额外的字段序列化为一个字段,这是不可搜索的
- 创建另一个表并将大部分数据放在那里。 (如果我已经有 3 个或更多表要加入来为用户(例如朋友、用户、检查共同朋友)提取记录,这会变得更难加入)
【问题讨论】:
-
在使用连接时,具有引用完整性的正确规范化表模式将为您提供更好的服务... :)
-
40+ ROWS 与您的问题标题不同 40+ columns... ;) 正如@NevilleK 指出的那样,这取决于即使是完全规范化和完美引用的表可能有 100 多列来描述该实体..
-
@bonCodigo 对不起,我的意思是列
-
为了您自己的理智,我会选择类似于您的第二个 ERD 的东西:将身份验证与“个人资料”信息分开。如有必要,构建一个可以处理第 3 方登录的结构 - 不一定是您所拥有的特定于 FB 的结构。如果有什么东西适合在您的架构中进行字段粉碎序列化,那么它可能是 3rd 方登录对象,它可以是可变的,通常由 3rd 方库处理,并且通常以 json 或 xml 的形式交付。
标签: mysql sql optimization multiple-columns