如何在SQL中请求随机行?

如何在SQL中请求随机行?

如何在纯SQL中请求随机行(或尽可能接近真正的随机行)?



神不在的星期二
浏览 580回答 4
4回答

汪汪一只猫

像杰里米这样的解决方案: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)..如果您的数据集与此假设有很大的偏差,您将得到扭曲的结果(某些行会比其他行更频繁地出现)。

12345678_0001

ORDER BY NEWID()取走7.4 millisecondsWHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table)取走0.0065 milliseconds!我肯定会采用后一种方法。
打开App,查看更多内容
随时随地看视频慕课网APP