一尘不染

ORDER BY RAND()替代品

mysql

这个问题已经在这里有了答案

7年前关闭。

可能重复:
MySQL:ORDER BY
RAND()的替代方法

我目前有一个查询,最终ORDER BY RAND(HOUR(NOW())) LIMIT 40得到40个随机结果。结果列表每小时更改一次。

这会杀死查询缓存,这会损害性能。

您是否可以建议一种获取随 时间变化 的随机(ish)结果集的替代方法 ?它不必是 每个 小时,也不必是完全随机的。

我宁愿选择一个随机结果,也不愿对表中的任意字段进行排序,但我会作为最后的选择…

(这是我不时地需要洗牌的新产品清单)。


阅读 348

收藏
2020-05-17

共1个答案

一尘不染

我认为更好的方法是将产品标识符下载到中间层,在需要时(每小时一次或每个请求一次)随机选择40个值,然后在查询中使用它们:product_id in (@id_1, @id_2, ..., @id_40)

2020-05-17