2

我有一张存储游戏高分的表格。这个游戏有很多关卡,分数按分数 DESC(这是一个索引)排序,其中关卡是关卡 ID。在此级别 ID 列上进行分区会创建与创建许多单独级别表(每个级别 ID 一个)相同的结果吗?我需要这个以某种方式分离出关卡数据,因为我预计会有 10 的数百万个条目。我听说分区可以加快这个过程,同时让我的表正常化。

另外,我的游戏中的关卡数量未知(可以随时添加或删除关卡)。我可以指定在此级别 ID 列上进行分区,并在将新的(不同级别 ID)添加到高分表时自动创建新分区吗?我可能从 10 个单独的级别开始,但最终以 50 个级别结束,但我所有的数据仍然保存在一个表中,但是有很多分区吗?我是否必须为级别 ID 编制索引才能使其正常工作?

提前感谢您的建议!

4

2 回答 2

1

在单列上创建索引很好,但根据您提供的信息,创建包含两列的索引将是更好的解决方案。我会运行一个

alter table highscores add index(columnScore, columnLevel);

这将使性能更好。从数据库的角度来看,无论您在寻找什么高分,数据库都会知道在哪里搜索它们。

关于这一点,如果可以(并且您正在使用 mysami 表),您还可以运行:

alter table order by columnScore, columnLevel;

然后它将您的所有数据组合在一起,这样即使数据库知道每个位的位置,它也可以找到附近属于彼此的所有记录 - 这意味着更少的硬盘驱动器工作 - 因此更快的结果。

第二次手术也可以产生巨大的影响。我的工作电脑(90 年代顶级的可怕旧机器)有一个数据库,里面有几百万条记录,我建立了 - 没什么大不了的,大约 2.5gb 的数据,包括索引 - 性能很差,但订购索引的数据将查询时间从每次查询约 1.5 分钟缩短到约 8 秒。这只是由于硬盘驱动器速度能够到达包含数据的所有扇区。

于 2012-08-13T08:17:31.267 回答
0

如果您打算为不同的用户存储数据,那么拥有 2 个表怎么样 - 一个包含有关不同级别的所有信息,另一个包含每个用户的一行以及他在 XML/json 中的分数?

于 2012-08-13T08:17:12.020 回答