我需要使用MySQL从表中获取可重复的随机行集。我使用MySQL RAND函数将该行的bigint主键作为种子来实现它。有趣的是,这产生的数字看起来并不随意。任何人都可以告诉我这里发生了什么,以及如何让它正常工作?如何使用RAND(种子)在MySQL中对行进行采样?
select id from foo where rand(id) < 0.05 order by id desc limit 100
在一个例子中,600行中没有一行返回。我改变选择,包括“ID,兰特(ID)”,并在摆脱兰特条款的地方,这是我得到了什么:
| 163345 | 0.315191733944408 |
| 163343 | 0.814825518815616 |
| 163337 | 0.313726862253367 |
| 163334 | 0.563177533972242 |
| 163333 | 0.312994424545201 |
| 163329 | 0.312261986837035 |
| 163327 | 0.811895771708242 |
| 163322 | 0.560980224573035 |
| 163321 | 0.310797115145994 |
| 163319 | 0.810430896291911 |
| 163318 | 0.560247786864869 |
| 163317 | 0.310064677437828 |
看多少0.31xxx线有。一点都不随意。
PS:我知道这是缓慢的,但在我的应用where子句限制行至数1000
如果再次运行相同的查询你得到了类似的结果?你还有很多0.31xxxx的吗? –
是的,它每次都是相同的 –
也相关:http://stackoverflow.com/questions/2405077/stable-repeatable-random-sort-mysql-rails – rogerdpack