小编典典

MySQL 从 600K 行中快速选择 10 个随机行

all

我怎样才能最好地编写一个从总共 600k 中随机选择 10 行的查询?


阅读 85

收藏
2022-03-11

共1个答案

小编典典

处理多种情况的出色帖子,从简单到间隙,再到带有间隙的不均匀。

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

对于大多数一般情况,您可以这样做:

SELECT name
  FROM random AS r1 JOIN
       (SELECT CEIL(RAND() *
                     (SELECT MAX(id)
                        FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

这假设 id 的分布是相等的,并且 id 列表中可能存在间隙。有关更高级的示例,请参阅文章

2022-03-11