我有 2 个表用户和评论。
就性能而言,我应该使用联接(带有用户 ID)从用户表中获取用户名,还是应该在评论中添加一个用户名列,所以我不需要仅加入 1 个数据(用户名),但我会需要为每个评论(用户名)添加一个数据。
如果表中有很多评论,加入会慢吗?
我应该做哪一个?在评论中加入或添加列用户名。
谢谢你。
加入可能是最好的,因此您不会将数据存储在两个地方。如果更改用户名怎么办?它不会更改评论的用户名。此外,连接两个表也不是很耗时。
这取决于用户和评论的数量。拥有您所要求的非规范化数据库可能会更快,但是您需要注意自己更新两个表中的用户名。如果您采用加入方式,请不要忘记在评论表中添加用户 ID 的索引。所以我相信正确的答案是加入,如果需要,以后再去规范化。
就个人而言,我宁愿使用两个简单的单独查询。我不太喜欢加入。根据定义,连接只会产生重复的数据。您可能想检查http://www.notorm.com/这是一个简单的 php db 访问层,采用无连接方式。
如果您使用的是 InnoDB,则可以添加列并添加外键限制。这将使您能够提高效率并减少更新索引的担忧。
将用户名存储在评论表中的一个原因是,如果您想在创建评论时知道用户名。如果随后更改了用户名,您仍将拥有评论时的名称。
不过,一般来说,您想使用联接。您希望将表上的主键定义为自动递增(标识)整数值。
如果您担心获取单个用户的所有评论的性能,那么您应该在用户 id 字段的评论表上建立索引。