这个问题已经在这里有了答案 :
7年前关闭。
可能重复: MySQL:ORDER BY RAND()的替代方法
我目前有一个查询,最终ORDER BY RAND(HOUR(NOW())) LIMIT 40得到40个随机结果。结果列表每小时更改一次。
ORDER BY RAND(HOUR(NOW())) LIMIT 40
这会杀死查询缓存,这会损害性能。
您是否可以建议一种获取随 时间变化 的随机(ish)结果集的替代方法 ?它不必是 每个 小时,也不必是完全随机的。
我宁愿选择一个随机结果,也不愿对表中的任意字段进行排序,但我会作为最后的选择…
(这是我不时地需要洗牌的新产品清单)。
我认为更好的方法是将产品标识符下载到中间层,在需要时(每小时一次或每个请求一次)随机选择40个值,然后在查询中使用它们:product_id in (@id_1, @id_2, ..., @id_40)。
product_id in (@id_1, @id_2, ..., @id_40)