如何在MySQL中根据时间有效地构建我的数据库以进行排序?

时间:2015-07-22 11:10:37

标签: mysql algorithm database-design ranking

我有一张ID和KPI这样的表

+----+---------------------+------------+--------+
| id | created_at          | page_views | shares |
+----+---------------------+------------+--------+
|  1 | 2015-02-25 07:24:50 |         10 |      3 |
|  2 | 2015-04-22 13:48:46 |         40 |      1 |
|  3 | 2014-09-17 15:26:51 |         28 |      5 |
|  4 | 2014-08-09 16:27:48 |        149 |      2 |
|  5 | 2015-01-21 15:56:30 |          3 |      1 |
+----+---------------------+------------+--------+

我想按照

的方式制作排名算法
SELECT id FROM pages ORDER BY (pages.page_views + pages.shares * 40) / (NOW() - created_at);

但我觉得随着KPI和主菜数量的增加,这种情况无法扩展。 有没有办法构建我的表,以便随着时间的推移使用降低分数的KPI有效排名?

1 个答案:

答案 0 :(得分:2)

我会添加pageranking列并使用批处理作业定期更新(每天?)。

这将提供良好的搜索性能,但代价是使用稍微过时的网页排名。