按触发器排序排名

问题描述 投票:0回答:1

我创造了一个玩家将获得等级的游戏。基本信息在表“char”(昵称,lvl,exp,money ......)中。

我想做一个定期更新并实时工作的排名。我认为每当有人进入网站上的“排名”标签时,在“char”表上执行“ORDER BY lvl”操作是没有意义的。

我的计划是这样的:

1)创建一个附加表:“排名”,其中数据将被物理排序。

2)创建一个触发器,每当有人达到新级别或某人创建新角色时,该触发器将更新排名。它是否有意义并且更有效率?

如果是这样,我该怎么办?如果没有,怎么办呢?

mysql sql sorting ranking leaderboard
1个回答
1
投票

每当有人访问“排名”页面时,你为什么不想做'ORDER BY char.lvl'?这通常是在关系数据库中执行此类操作的方式。

去标准化(出于性能原因而复制数据/索引的行为)正是您所建议的。复制“排名”表中的相关数据会起作用,但消费者会有更多空间。

现在,去标准化或使用触发器没有任何本质上的错误,但我没有看到增加这种复杂性的真正原因(但你知道的更好 - 你是否尝试过这种情况并且性能低于预期?)。

您可以在lvl列上创建索引,这将使查询更快地进行排序。 (有关索引的更多信息,请参阅https://dev.mysql.com/doc/refman/8.0/en/create-index.html)。像这样更新二级索引会更快,并且比重建“排名”表更少的内存/处理器密集。

如果证明附加指数不足,那么触发器+附加表可以很好地锻炼......

通过“物理排序”,我认为你的意思是拥有一个主键(而不是二级索引)。但这个关键包括什么?也许lvl +昵称?如果是这样的话,我仍然倾向于lvl +昵称的索引。

并且,这引出了一些额外的问题......用户可以更改他们的昵称吗?新的水平会增加他们的经验吗?

© www.soinside.com 2019 - 2024. All rights reserved.