我有一张桌子,里面有一场比赛的高分。这个游戏有许多级别,分数然后按分数DESC (这是一个索引)排序,其中级别是级别ID。在此级别ID列上进行分区会创建与创建许多单独的级别表(每个级别ID一个)相同的结果吗?我需要它来以某种方式分离出级别数据,因为我预计会有10个数百万的条目。我听说分区可以加速这个过程,同时让我的表标准化。
另外,我的游戏中有未知数量的关卡(关卡可以随时添加或删除)。当一个新的(不同的级别ID)添加到highscore表中时,我可以指定在这个level ID列上进行分区,并自动创建新的分区吗?我可能一开始有10个单独的级别,但最后有50个,但我的所有数据仍然保存在一个表中,但是有很多分区?我是否必须为级别ID建立索引才能使其工作?
提前感谢您的建议!
发布于 2012-08-13 16:17:31
在单个列上创建索引很好,但根据您提供的信息创建包含两列的索引将是更好的解决方案。我会运行一个
alter table highscores add index(columnScore, columnLevel);
这将使性能变得更好。从数据库的角度来看,无论您正在寻找多高的分数,数据库都知道在哪里搜索它们。
在这一点上,如果可以(并且您正在使用mysami表),您还可以运行:
alter table order by columnScore, columnLevel;
然后,它会将所有数据组合在一起,这样即使数据库知道每一位的位置,它也可以找到附近属于另一个的所有记录-这意味着更少的硬盘工作-因此结果更快。
第二个操作也可以产生巨大的不同。我工作的PC (90年代最好的可怕的旧机器)有一个数据库,里面有几百万条记录,我建立了一个数据库-没有什么大的,大约2.5 My的数据,包括索引-性能很差,但是对索引的数据排序将查询时间从每次查询1.5分钟提高到大约8秒。这只是由于硬盘驱动器能够到达包含数据的所有扇区的速度。
发布于 2012-08-13 16:17:12
如果您计划存储不同用户的数据,那么使用两个表如何?一个表包含有关不同级别的所有信息,另一个表包含每个用户的一行,以及他在XML/json中的分数。
https://stackoverflow.com/questions/11930368
复制相似问题