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

mysql– 返回随机结果(按rand()排序),第1张

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

我记得在某个地方读过使用rand()的命令很糟糕,我刚刚开始发表它并发现了一篇证明它的文章.对于大型数据库,rand()的顺序可能非常慢,建议的解决方案是在PHP中生成一个随机数并根据它进行选择.问题是我需要验证其他字段才能返回我的记录.我可能还删除了一些旧记录,这也可能导致问题.任何人都可以提供一种体面的方式从表中选择一些符合某些条件的随机记录(例如,付费的字段必须等于1)?最佳答案RAND()排序速度慢的原因是你要求数据库在返回任何内容之前对整个表进行实际排序.将负载减少到单个表扫描要快得多(尽管仍然有点慢).

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

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

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

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

总结

以上是内存溢出为你收集整理的mysql – 返回随机结果(按rand()排序)全部内容,希望文章能够帮你解决mysql – 返回随机结果(按rand()排序)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1167376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存