我在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',...,而不是自动增加序列。
答案 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