当从数据库中选择排名对象时(例如,用户投票的文章),显示的最佳方式是什么:
-
当前页面的项目
-
用户's rating, per item (if they'已投票)
粗略的架构:
articles: id, title, content, ...
user: id, username, ...
votes: id, user_id, article_id, vote_value
它是更好/理想的:
-
选择当前页面的项目
-
选择用户's vote, limiting them to the page of items with an ' IN'子句
要么
- 选择当前页面的项目,只需从用户投票表中输入'JOIN'投票数据
或者,完全不同的东西?
这在理论上是在高流量环境中,并使用像mysql这样的rdbms . fwiw,我认为这是“在做之前先思考”而不是“过早优化” .
谢谢!
2 回答
JOIN会更快;它可以节省数据库的往返 .
但是,在你真正获得一些流量之前,我不会担心这一点 . 很多人都反对premature optimization,我会随机引用一句:
如果您需要订购,请使用此:
这将计算单个查询中的投票和分页 .
如果您只想显示用户自己的投票,请使用
LEFT JOIN
:在
(vote_user, vote_item)
上 Build 索引将大大改善此查询 .请注意,您可以使
(vote_user, vote_item)
aPRIMARY KEY
进行投票,这将进一步改善此查询 .