mysql – 返回随机结果(按rand()排序)

前端之家收集整理的这篇文章主要介绍了mysql – 返回随机结果(按rand()排序)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我记得在某个地方读过使用rand()的命令很糟糕,我刚刚开始发表它并发现了一篇证明它的文章.对于大型数据库,rand()的顺序可能非常慢,建议的解决方案是在PHP生成一个随机数并根据它进行选择.问题是我需要验证其他字段才能返回我的记录.我可能还删除了一些旧记录,这也可能导致问题.任何人都可以提供一种体面的方式从表中选择一些符合某些条件的随机记录(例如,付费的字段必须等于1)?

最佳答案
RAND()排序速度慢的原因是你要求数据库在返回任何内容之前对整个表进行实际排序.将负载减少到单个表扫描要快得多(尽管仍然有点慢).

这意味着您可以通过避免排序来获得部分方式:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

这将选择表中所有行的大约1%,对它们进行排序并返回前100位.请注意,此处的主要问题(以及@ cmd的答案)是您无法确定查询是否返回什么都没有.

上面的方法应该包括整个表扫描(以决定使用哪些行),然后是大约1%的行.如果您有很多行,则可以相应地减少百分比.

猜你在找的MySQL相关文章