Каков наилучший способ выбрать случайную строку из таблицы в MySQL?

Возможный дубликат:
быстрый выбор случайной строки из большой таблицы в MySQL

Я видел случайные строки, извлекаемые с помощью таких запросов, которые довольно неэффективны для больших наборов данных.

SELECT id FROM table ORDER BY RANDOM() LIMIT 1

Я также видел различные другие специфичные для СУБД решения, которые не работают с MySQL.

Лучшее, что я могу придумать - это использовать два запроса и сделать что-то вроде этого.

  1. Получить количество строк в таблице. Таблицы MyISAM хранят количество строк, поэтому это очень быстро.
  2. Вычислите случайное число между 0 и rowcount - 1.
  3. Выберите строку, упорядоченную по первичному ключу, с randnum LIMIT, 1

Вот SQL:

SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;

У кого-нибудь есть идея получше?

0 ответов

Другие вопросы по тегам