gpt4 book ai didi

mysql - 按触发器排序排名

转载 作者:行者123 更新时间:2023-11-29 09:50:04 24 4
gpt4 key购买 nike

我创建了一个游戏,玩家可以在其中获得等级。基本信息位于表“char”(昵称、lvl、exp、金钱...)中。

我想要制作一个定期更新且实时运行的排名。我认为每次有人进入网站上的“排名”选项卡时,对“char”表执行“ORDER BY lvl”操作是没有意义的。

我的计划是这样的:

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

2) 创建一个触发器,每当有人达到新级别或有人创建新角色时,该触发器就会更新排名。这样做有意义并且更有效率吗?

如果可以,我该怎么办?如果没有的话,还能怎么做?

最佳答案

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

反规范化(出于性能原因而复制数据/索引的行为)确实是您所建议的。在“排名”表中复制相关数据是可行的,但会消耗更多空间。

现在,反规范化或使用触发器本身并没有什么问题,但我没有看到增加这种复杂性的真正原因(但你会更清楚 - 你尝试过这个并且性能低于预期吗?) .

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

如果证明附加索引不够,那么触发器+附加表可能会很好......

通过“物理排序”,我认为您的意思是拥有主键(相对于辅助索引)。但这把 key 包括什么?也许等级+昵称?如果是这样的话,我仍然倾向于在 lvl+nickname 上建立索引。

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

关于mysql - 按触发器排序排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com