Как выбрать случайную запись из базы данных MySQL - PullRequest
0 голосов
/ 20 октября 2018

Мне нужно выбрать, скажем, 2000000 записей в произвольном порядке из очень большой базы данных.Я посмотрел на предыдущие вопросы.Поэтому, пожалуйста, не отмечайте этот вопрос как дубликат.Мне нужно разъяснение.Большинство ответов предлагают использовать функцию ORDER BY RAND().Поэтому мой запрос будет:

SELECT DISTINCT no
FROM table
WHERE name != "null"
ORDER BY RAND()
LIMIT 2000000;

Я хочу, чтобы каждая запись выбиралась случайным образом.Я не уверен, что я понимаю эффект ORDER BY RAND() здесь.Но я боюсь, что он выберет случайную запись, скажем, 3498, и продолжит выбор оттуда, скажем, следующие записи будут: 3499, 3500, 3501 и т. Д. Я хочу, чтобы каждая запись была случайной, чтобы не начинать порядок сслучайная запись.

Как выбрать 2000000 случайных записей, где каждая запись выбирается случайным образом?Можете ли вы упростить, что именно ORDER BY RAND() делает?

Обратите внимание, что я использую Google BigQuery, поэтому проблема с производительностью не должна быть большой проблемой здесь.Я просто хочу выполнить требование выбора случайных 2000000 записей.

1 Ответ

0 голосов
/ 20 октября 2018
SELECT x
FROM T
ORDER BY RAND()

эквивалентно

SELECT x
FROM (
  SELECT x, RAND() AS r
  FROM T
)
ORDER BY r

. Запрос генерирует случайное значение для каждой строки, а затем использует это случайное значение для упорядочивания строк.Если вы включите ограничение:

SELECT x
FROM T
ORDER BY RAND()
LIMIT 10

Это случайным образом выбирает 10 строк из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...