我记得在某处读到过使用 order by rand() 是不好的,我刚刚启动它并找到了一篇文章证明了这一点。对于大型数据库,通过 rand() 进行排序可能会非常慢,建议的解决方案是在 php 中生成随机数并根据它进行选择。问题是我需要验证其他字段才能返回我的记录。我可能还删除了一些旧记录,这也可能会导致问题。任何人都可以提供一种体面的方法来从表中选择一些符合某些条件的随机记录(例如字段paid
必须等于 1) ?
订购方式的原因RAND()
速度可能会很慢,因为您强制数据库在返回任何内容之前对整个表进行实际排序。仅将负载减少到单个表扫描会快得多(尽管仍然有点慢)。
这意味着您可以通过避免排序来达到目的:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
这将选择表中所有行的大约 1%,对它们进行排序并返回前 100 行。请注意,这里的主要问题(以及 @cmd 的答案)是您无法确定查询是否返回任何事情。
上述方法应涉及全表扫描(以决定使用哪些行),然后对大约 1% 的行进行排序。如果行数较多,则可以相应减少百分比。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)