【问题标题】:How to select random record from mysql database如何从mysql数据库中选择随机记录
【发布时间】:2019-03-25 05:12:00
【问题描述】:

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

SELECT DISTINCT no
FROM table
WHERE name != "null"
ORDER BY RAND()
LIMIT 2000000;

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

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

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

【问题讨论】:

  • 我认为您使用的是 BigQuery 而不是 MySQL。请尽量说清楚
  • 我在 BigQuery 中使用 MySQL 查询。

标签: mysql database select random google-bigquery


【解决方案1】:
SELECT x
FROM T
ORDER BY RAND()

等价于

SELECT x
FROM (
  SELECT x, RAND() AS r
  FROM T
)
ORDER BY r

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

SELECT x
FROM T
ORDER BY RAND()
LIMIT 10

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

【讨论】:

  • 谢谢。可以肯定的是,我发布的查询将从表 table 中选择 2000000 条随机记录,其中 name 具有名称值(即不为空)?
  • 另外,如果我使用 ORDER BY RAND() 查询 500 万条记录,这仍然是处理大量记录的好方法吗?
  • 您需要使用name IS NOT NULL 来查找非空名称。是的,同样的技术适用于更大的限制。
  • 数据库所有者有一个字段说我在这里叫它name' which either contains a string or null. I see the null` 用小写字母写成我用的一样。所以我认为他们在该字段中输入了“null”。我不确定MYSQL是否可以用小写字母输入null或将其留空。但这就是我所看到的。但是,我认为我的查询最后返回的不是null。这似乎仍然会引起任何问题吗?如果您发现任何错误,请告诉我。
  • 您询问了选择随机行的问题,我回答了这个问题。如果您对 null 处理有其他问题,请提交新问题。
猜你喜欢
  • 1970-01-01
  • 2013-01-03
  • 2012-12-11
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多