猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何在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)..如果您的数据集与此假设有很大的偏差,您将得到扭曲的结果(某些行会比其他行更频繁地出现)。
0
0
0
12345678_0001
ORDER BY NEWID()取走7.4 millisecondsWHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table)取走0.0065 milliseconds!我肯定会采用后一种方法。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
MySQL
SQL Server
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续