ForeignKey Relation与重复数据

时间:2013-08-14 13:42:01

标签: database performance foreign-keys

我的评论表如下

Comments
----------------
Id
ContentId
CreateDate
UserId
Text
ImageUrl

当我想获得评论时,我使用以下sql查询:

SELECT Comments.*, Users.Name AS Username, Users.Thumbnail AS UserThumbnail 
FROM Comments, Users 
WHERE Users.ID = Comments.UserId

如果我将Username和UserThumbnail列添加到Comments表中并只使用SELECT * FROM Comments查询

,它是否可以提高性能
Comments
-----------
Id
ContentId
CreatedDate
UserId
Username
UserThumbnail
Text
ImageUrl

2 个答案:

答案 0 :(得分:0)

嗯,是的,它可能会提高查询的性能,但是以牺牲冗余为代价 - 您现在必须多次存储用户名和缩略图。

这是关系数据库设计的基本原则 - 通过外键使用连接来消除重复。

答案 1 :(得分:0)

如果您已正确编入索引,那么查询应该很快。不,你不应该考虑非规范化,因为你必须添加触发器以使数据保持最新,因为它会改变,这将减慢插入速度。或者你的数据库中会有不良数据,这使整个事情变得毫无价值。

BTW,隐式连接区域是一个sql反模式,你应该停止使用它们。很容易发生意外的连接,如果你将它们与左连接结合起来就会得到不正确的结果,并且它们更难以维护并在20多年前被替换。