0

我想从 mysql 表中随机获取记录。我知道我们可以通过 rand() 使用 order 来获取,但对于大字段来说,这似乎是一个缓慢的过程。我们可以用其他方法来获取 rand 记录吗?

4

4 回答 4

2

如果您有一些主键Id,您可以在 和 之间选择一个随机数MIN(Id)MAX(Id)获取该项目。Id如果该项目不存在,只需再试一次。

于 2012-08-09T06:50:05.027 回答
2

你可以先得到一个兰特抵消

SELECT FLOOR(RAND() * COUNT(*)) AS rnd FROM your_table

然后使用偏移量选择一条记录。

于 2012-08-09T06:52:34.400 回答
1
SELECT name
FROM random JOIN
     (SELECT CEIL(RAND() *
             (SELECT MAX(id)
              FROM random)) AS id
     ) AS r2
     USING (id);

您的问题已经在这里得到解答:

如何优化 MySQL 的 ORDER BY RAND() 函数?

http://jan.kneschke.de/projects/mysql/order-by-rand/

于 2012-08-09T06:52:03.620 回答
0

你可以试试这个:

SELECT * FROM  table 
join 
  (select round(rand()*(select max(id) from table)) as val from table) as rnd
on rnd.val=table.id;
于 2012-08-09T06:52:04.227 回答