【发布时间】:2014-10-14 21:22:02
【问题描述】:
我需要选择 2 个随机行,但众所周知 rand() 太慢了。所以我尝试了一个网站上的代码,它是:
SELECT *
FROM bilder AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM bilder)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 2
但是这样我多次得到相同的 2 行并且解析也不正确,所以这完全没用。有没有比 rand() 更好的可行解决方案?表名称为bilder,字段为:id、userid、nickname。 id 是主要和自动增量。一些行也被删除,所以它不是 1 2 3 4 5 而是 1 2 4 5 6...所以生成随机数并选择它们的解决方案将不起作用
【问题讨论】:
-
定义“太慢”。并且多次获得相同的两行是随机的。
-
jan.kneschke.de/projects/mysql/order-by-rand 查看基准。两行多次我的意思是:第一个查询结果:id 2 和 4,第二个查询:id 1 和 3,第三个查询:2 和 4 再次,第四:7 和 9,sixt:2 和 4 再次
-
TML 我也看到了,但它不能正常使用两个随机行:/