如何从mysql数据库中选择随机记录

use*_*654 2 mysql database random select google-bigquery

我需要从一个非常大的数据库中随机选择 2000000 条记录。我看了之前的问题。因此,请不要将此问题标记为重复。我需要澄清。大多数答案建议使用ORDER BY RAND()函数。所以我的查询将是:

SELECT DISTINCT no
FROM table
WHERE name != "null"
ORDER BY RAND()
LIMIT 2000000;
Run Code Online (Sandbox Code Playgroud)

我希望随机选择每条记录。我不确定我是否理解ORDER BY RAND()这里的效果。但我担心它会选择一个随机记录,比如 3498,并从那里继续选择,比如,下一个记录将是:3499、3500、3501 等。我希望每个记录都是随机的,而不是从开始顺序随机记录。

如何选择 2000000 条随机记录,其中每条记录都是随机选择的?你能简化一下具体的ORDER BY RAND()作用吗?

请注意,我使用 Google BigQuery,因此性能问题在这里应该不是大问题。我只是想达到随机选择2000000条记录的要求。

Ell*_*ard 5

SELECT x
FROM T
ORDER BY RAND()
Run Code Online (Sandbox Code Playgroud)

相当于

SELECT x
FROM (
  SELECT x, RAND() AS r
  FROM T
)
ORDER BY r
Run Code Online (Sandbox Code Playgroud)

该查询为每行生成一个随机值,然后使用该随机值对行进行排序。如果您包含限制:

SELECT x
FROM T
ORDER BY RAND()
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

这会从表中随机选择 10 行。