[英]How to randomly select some, say 1000, values from a specific columns in a very large table in MySQL?
我在MySQL數據庫中有一個非常大的表,該表的列名為exa_id
,此表的行數超過10,000,000。 我想通過Python中的pandas.read_sql
語句隨機有效地選擇僅1000個數據。 如何編寫代碼?
SQL select ext_id from table_name order by rand() limit 1000
性能非常糟糕,我想select ext_id from table_name order by rand() limit 1000
一種方式。
exa_id
一種解釋是, 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;
該查詢將為您提供幫助。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.