如何在 MySQL 中有效地构建我的数据库以按依赖于时间的函数排序?
How can I structure my database to order by a function dependent on time efficiently in MySQL?
我有一个 table,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 和主菜数量的增加,这无法扩展。
有没有一种方法可以构建我的 table 以使用随着时间的推移分数递减的 KPI 进行有效排名?
我会添加一个 pageranking
列并使用批处理作业定期(每天?)更新它。
这将以使用稍微过时的网页排名为代价提供良好的搜索性能。
我有一个 table,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 和主菜数量的增加,这无法扩展。 有没有一种方法可以构建我的 table 以使用随着时间的推移分数递减的 KPI 进行有效排名?
我会添加一个 pageranking
列并使用批处理作业定期(每天?)更新它。
这将以使用稍微过时的网页排名为代价提供良好的搜索性能。