如何从MySQL很大的表中的特定列中随机选择一些值(例如1000)?

时间:2019-01-04 04:26:39

标签: python mysql sql

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

SQL select ext_id from table_name order by rand() limit 1000的性能真的很差,我想换一种方式。

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

2 个答案:

答案 0 :(得分:1)

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

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;

内部查询选择大约2000行。有一些统计差异。然后外部查询会随机排序这些内容,并从中选择1000个。

如果您不知道行数,则可以执行以下操作:

<form @submit.prevent="Calculate">
   <input type="time" class="timepicker" name="timepicker" min="00:00" max="23:59" v-model="time" required>
   <button>Submit</button>
</form>

答案 1 :(得分:0)

此查询将为您提供帮助。

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 100