这是为即将到来的项目。我有两个表 - 第一个保存的照片轨道,而第二个跟踪照片的排名如何优化这个MySQL表?
Photos:
+-------+-----------+------------------+
| id | photo | current_rank |
+-------+-----------+------------------+
| 1 | apple | 5 |
| 2 | orange | 9 |
+-------+-----------+------------------+
照片等级不断定期更改的,这是跟踪它的表:
Ranks:
+-------+-----------+----------+-------------+
| id | photo_id | ranks | timestamp |
+-------+-----------+----------+-------------+
| 1 | 1 | 8 | * |
| 2 | 2 | 2 | * |
| 3 | 1 | 3 | * |
| 4 | 1 | 7 | * |
| 5 | 1 | 5 | * |
| 6 | 2 | 9 | * |
+-------+-----------+----------+-------------+ * = current timestamp
为了报告/分析目的,每个等级都被跟踪。 [编辑]用户将有权访问需求统计。
我跟一个在这个领域有经验的人交谈过,他告诉我要存储像上面这样的行列是要走的路。但我还不确定。
这里的问题是数据冗余。将会有数万张照片。照片排名以小时为单位进行更改(很多时间 - 在几分钟内)用于最近的照片,但较少用于较老的照片。以这样的速度,该表格将在数月内拥有数百万条记录。由于我没有处理大型数据库的经验,这让我有点紧张。
我想到了这一点:
Ranks:
+-------+-----------+--------------------+
| id | photo_id | ranks |
+-------+-----------+--------------------+
| 1 | 1 | 8:*,3:*,7:*,5:* |
| 2 | 2 | 2:*,9:* |
+-------+-----------+--------------------+ * = current timestamp
这意味着在PHP一些额外的代码分裂列/时间(和排序),但是这看起来挺合我意。
这是一个正确的方法来优化表的性能?你会推荐什么?
是排名连接到其他任何东西?像谁给它的用户?如果有的话,这种关系有多重要?即?你需要存储用户游戏的排名吗? – 2010-06-05 13:19:49
排名与其他任何内容都没有关联,只是照片。这是计算机算法计算和更改! :) – Yeti 2010-06-05 13:27:39
@Col:你的评论总是让我微笑! :)其实ID看起来更像这样:** 4606886418 **,现在有大约200万张照片。每个人的等级变化50+次。所以,尽管这可能不太大,但也不能称之为小。 – Yeti 2010-06-05 14:10:20