Yet*_*eti 6 php mysql database optimization
这是为即将到来的项目.我有两张桌子 - 第一张用于记录照片,第二张用于记录照片的等级
Photos:
+-------+-----------+------------------+
| id | photo | current_rank |
+-------+-----------+------------------+
| 1 | apple | 5 |
| 2 | orange | 9 |
+-------+-----------+------------------+
Run Code Online (Sandbox Code Playgroud)
照片排名会定期更改,这是跟踪它的表格:
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
Run Code Online (Sandbox Code Playgroud)
跟踪每个等级以用于报告/分析目的. [编辑]用户可以按需访问统计信息.
我跟那些在这个领域有过经验的人交谈过,他告诉我,存储上面的等级是要走的路.但我还不太确定.
这里的问题是数据冗余.将有成千上万的照片.对于最近的照片,照片等级每小时(很多次 - 几分钟内)会发生变化,但旧照片的频率变化较少.按此速率,该表将在几个月内拥有数百万条记录.由于我没有使用大型数据库的经验,这让我有点紧张.
我想到了这个:
Ranks:
+-------+-----------+--------------------+
| id | photo_id | ranks |
+-------+-----------+--------------------+
| 1 | 1 | 8:*,3:*,7:*,5:* |
| 2 | 2 | 2:*,9:* |
+-------+-----------+--------------------+ * = current timestamp
Run Code Online (Sandbox Code Playgroud)
这意味着PHP中的一些额外代码可以分割排名/时间(和排序),但这看起来还不错.
这是优化表格性能的正确方法吗?你会推荐什么?