Как случайным образом выбрать, скажем, 1000 значений из определенных столбцов в очень большой таблице в MySQL? - PullRequest
0 голосов
/ 04 января 2019

У меня очень большая таблица в базе данных MySQL, в которой есть имена столбцов exa_id, а количество строк в этой таблице превышает 10 000 000.Я хочу произвольно и эффективно выбрать только 1000 данных с помощью оператора pandas.read_sql в Python.Как мне написать код?

SQL select ext_id from table_name order by rand() limit 1000 работает очень плохо, я бы хотел по-другому.

Еще одно объяснение состоит в том, что содержимое столбца exa_id является строками, например 'uudjsx-2220983-df', 'ujxnas-9800xdsd-d2', ..., а не последовательность с автоматическим увеличением.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это работает в большинстве случаев:

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;
0 голосов
/ 04 января 2019

Этот запрос поможет вам.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...