Каков наилучший способ выбрать случайную строку из таблицы в MySQL?
Возможный дубликат:
быстрый выбор случайной строки из большой таблицы в MySQL
Я видел случайные строки, извлекаемые с помощью таких запросов, которые довольно неэффективны для больших наборов данных.
SELECT id FROM table ORDER BY RANDOM() LIMIT 1
Я также видел различные другие специфичные для СУБД решения, которые не работают с MySQL.
Лучшее, что я могу придумать - это использовать два запроса и сделать что-то вроде этого.
- Получить количество строк в таблице. Таблицы MyISAM хранят количество строк, поэтому это очень быстро.
- Вычислите случайное число между 0 и rowcount - 1.
- Выберите строку, упорядоченную по первичному ключу, с randnum LIMIT, 1
Вот SQL:
SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
У кого-нибудь есть идея получше?