首页 > 解决方案 > 如何从 MySQL 中一个非常大的表中的特定列中随机选择一些值,比如 1000 个值?

问题描述

我在 MySQL 数据库中有一个非常大的表,它有一个列名exa_id,该表的行数超过 10,000,000。我想通过Python 中的语句随机有效地仅选择 1000 个数据。pandas.read_sql我该如何编写代码?

SQLselect ext_id from table_name order by rand() limit 1000执行得非常糟糕,我想换一种方式。

另一种解释是 column 的内容exa_id是字符串,例如 'uudjsx-2220983-df','ujxnas-9800xdsd-d2',...,而不是自增序列。

标签: pythonmysqlsql

解决方案


这在大多数情况下都有效:

select ext_id
from table_name t
where rand() < 2000 / 10000000
order by rand()
limit 1000;

内部查询选择大约 2000 行。存在一些统计变异性。然后,外部查询对这些随机排序并选择其中的 1000 个。

如果你不知道行数,你可以这样做:

select t.ext_id
from table_name t cross join
     (select count(*) as cnt from t) tt
where rand() < 2000 / tt.cnt
order by rand()
limit 1000;

推荐阅读