python - 如何从 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',...,而不是自增序列。
解决方案
这在大多数情况下都有效:
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;
推荐阅读
- python - 附加到两个数组的更多pythonic方式
- spring-boot - Spring Kafka Listener 暂停消息处理一段时间
- python - 使用条件结果列连接 PySpark 数据帧
- maven - 我如何只包含我的依赖标签中的 jar
- angularjs - 角度密码验证
- javascript - 如何将sql查询变量添加到javascript中并计算?
- python - Python 列表中出现不必要的逗号
- java - 如何在 JUnit 测试中获取所有 FIXME?
- java - Android Play 资产交付:如何重用旧资产包?
- mobaxterm - MobaXterm 网络错误:尝试复制选项卡时连接被拒绝