【发布时间】:2017-08-21 10:35:13
【问题描述】:
我有三张表,一张是用户制作的关卡,另外两张表用于对上述关卡进行投票和否决。
我现在有近 1000 万张选票,并且在必要时计算一个级别的所有选票变得非常缓慢,因此我计划在级别表上添加两列,分别计算赞成票和反对票,服务器可能每 24 小时更新一次。
很遗憾,投票表没有自动递增的主键列,而是主键是 mapid 和 userid 的组合,因此一个用户不能为同一个地图投票两次。
所以我在投票表中添加一列“计数”,如果尚未添加到聚合数据中,则为 0,如果已添加,则为 1。这样我就不需要重新计算所有已添加到聚合数据中的投票,只需重新计算新的投票即可。
我的查询需要:
-选择所有计票为0的选票
-从该行获取mapid,并在levels表中增加该mapid的thumbsup计数
-将该票设为 1
我正在使用 MySQL。非常感谢所有帮助!
Table maps_thumbsup
userid | mapid | counted
Table maps_thumbsdown
userid | mapid | counted
Table maps
id | authorname | leveldata | ... | thumbsupcount | thumbsdowncount
【问题讨论】:
-
你的数据库结构是什么,到目前为止你尝试了什么?
-
包含模式或表表示将有助于回答您的问题
-
Schema 会很有帮助。听起来你也可以从使用一些独特的索引中受益。您是否已针对性能调整 MySQL 或使用默认值?
-
添加了一些关于表格结构的信息,有帮助吗?我没有做太多改变,我相信它基本上是默认的