MySQL分区高分表

时间:2012-08-13 08:11:44

标签: php mysql database database-partitioning

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

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

提前感谢您的建议!

2 个答案:

答案 0 :(得分:1)

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

alter table highscores add index(columnScore, columnLevel);

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

就这一点而言,如果可以,(并且你正在使用mysami表),你也可以运行:

alter table order by columnScore, columnLevel;

然后将所有数据组合在一起,这样即使数据库知道每个位的位置,它也可以找到所有相邻的记录 - 这意味着硬盘工作量减少 - 因此结果更快。 / p>

第二次操作也可以产生巨大的差异。我的电脑在工作(可怕的旧机器,在九十年代的顶级范围内)有一个数据库,里面有几百万条记录我没有 - 没有什么大的,大约2.5gb的数据包括索引 - 而且性能拖延,但订购了索引数据将查询时间从每个查询大约1.5分钟提高到大约8秒。这只是因为硬盘速度能够到达包含数据的所有扇区。

答案 1 :(得分:0)

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