加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2020-12-11 23:36:49 所属栏目:MySql教程 来源:网络整理
导读:我记得在某个地方读过使用rand()的命令很糟糕,我刚刚开始发表它并发现了一篇证明它的文章.对于大型数据库,rand()的顺序可能非常慢,建议的解决方案是在php中生成一个随机数并根据它进行选择.问题是我需要验证其他字段才能返回我的记录.我可能还删除了一些旧记

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读