我想从mysql表中获取随机记录。我知道我们可以通过 rand() 使用 order 进行获取,但对于大字段来说,这似乎是缓慢的过程。我们能不能有其他方法来获取兰德记录。
你可以先得到一个兰特偏移
量SELECT FLOOR(RAND() * COUNT(*)) AS rnd FROM your_table
然后使用偏移量选择一条记录。
如果你有一些主键Id
你可以在MIN(Id)
和MAX(Id)
之间选择一个随机数,然后得到该项目。如果具有该Id
的项目不存在,请重试。
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/
你可以试试这个:
SELECT * FROM table
join
(select round(rand()*(select max(id) from table)) as val from table) as rnd
on rnd.val=table.id;