0

我有评论表如下

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
4

2 回答 2

0

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

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

于 2013-08-14T13:52:55.647 回答
0

如果您已正确索引,该查询应该已经很快了。不,您不应该考虑非规范化,因为您将不得不添加触发器以使数据保持最新,因为它会降低插入速度。否则您的数据库中将有错误的数据,这会使整个事情变得毫无价值。

顺便说一句,隐式连接区域是一个 sql 反模式,您应该停止使用它们。很容易意外出现 crioss 连接,如果稍后将它们与左连接结合起来,您可能会得到不正确的结果,并且它们更难维护并且在 20 多年前被替换。

于 2013-08-14T14:25:25.280 回答