【发布时间】:2012-01-16 23:48:04
【问题描述】:
我环顾四周,似乎没有任何简单的方法可以做到这一点。它几乎看起来更容易抓住记录的子集并在代码中进行所有随机化(perl)。我在网上看到的方法似乎更多的是针对最多数十万,但肯定不是数百万。
我正在使用的表有 600 万条记录(并且还在增长),ID 会自动递增,但并不总是存储在表中(无间隙)。
我已尝试执行推荐的 LIMIT 1 查询,但查询需要永远运行 - 鉴于记录中存在空白,是否有快速的方法来执行此操作?我不能只取最大值并在范围内随机化。
更新:
我的一个想法可能是获取最大值,根据最大值随机化一个限制,然后获取从 random_limit_1 到 random_limit_2 的 10 条记录,然后获取在该范围内找到的第一条记录。
或者如果我知道最大值,有没有办法我可以选择表的第 5 条记录,而不必知道它是哪个 ID。然后只需获取该记录的 id。
更新:
这个查询有点快。还是不够快=/
SELECT t.id FROM table t JOIN (SELECT(FLOOR(max(id) * rand())) as maxid FROM table) as tt on t.id >= tt.maxid LIMIT 1
【问题讨论】:
-
non-gapless是什么意思?有差距吗? -
相当肯定 nodebunny 表示一个典型的自动增量索引,过去删除了一些行...
-
您帖子中的更新查询在我的系统上总共运行了大约 0.005 秒,您希望它运行多快?