为了账号安全,请及时绑定邮箱和手机立即绑定

如何在SQL中请求随机行?

如何在SQL中请求随机行?

神不在的星期二 2019-06-03 10:29:21
如何在SQL中请求随机行?如何在纯SQL中请求随机行(或尽可能接近真正的随机行)?
查看完整描述

4 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

像杰里米这样的解决方案:

SELECT * FROM table ORDER BY RAND() LIMIT 1

工作,但它们需要对所有表进行顺序扫描(因为需要计算与每一行相关联的随机值-以便可以确定最小的值),这对于即使是中等大小的表也是相当慢的。我的建议是使用某种类型的索引数字列(许多表都将这些列作为主键),然后编写如下内容:

SELECT * FROM table WHERE num_value >= RAND() * 
    ( SELECT MAX (num_value ) FROM table ) ORDER BY num_value LIMIT 1

这在对数时间内工作,不管表大小如何,如果num_value被索引了。请注意:这假设num_value平均分布在范围内。0..MAX(num_value)..如果您的数据集与此假设有很大的偏差,您将得到扭曲的结果(某些行会比其他行更频繁地出现)。


查看完整回答
反对 回复 2019-06-03
?
12345678_0001

TA贡献1802条经验 获得超5个赞

ORDER BY NEWID()

取走7.4 milliseconds

WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table)

取走0.0065 milliseconds!

我肯定会采用后一种方法。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 579 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信