【发布时间】:2011-12-19 11:13:21
【问题描述】:
我需要使用 MySQL 从表中获取一组可重复的随机行。我使用 MySQL RAND 函数实现了这个,使用行的 bigint 主键作为种子。有趣的是,这会产生看起来一点也不随机的数字。谁能告诉我这里发生了什么以及如何让它正常工作?
select id from foo where rand(id) < 0.05 order by id desc limit 100
在一个示例中,600 行中没有返回任何行。我将选择更改为包含“id,rand(id)”,并去掉了 where 这就是我得到的 rand 子句:
| 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 的吗?
-
是的,每次都一样