MySQL тяжелые альтернативы запроса RAND - PullRequest
0 голосов
/ 11 января 2012

У меня есть запрос, который получает 10 случайных сообщений, и, как вы знаете, это очень медленный и тяжелый запрос, есть ли альтернативы, чтобы отправить этот запрос без медленного появления?

мой текущий запрос ранда:

SELECT * FROM posts ORDER BY RAND() LIMIT 10

1 Ответ

0 голосов
/ 11 января 2012

Из документа MySQL:

SELECT * FROM tablename ORDER BY RAND () LIMIT 1

работает для небольших таблиц, но как только размер таблиц увеличится до 300 000 записей, это будет оченьмедленный, потому что MySQL должен будет обрабатывать ВСЕ записи из таблицы, упорядочивать их случайным образом, а затем возвращать первую строку упорядоченного результата, и эта сортировка занимает много времени.Вместо этого вы можете сделать это следующим образом (по крайней мере, если у вас есть auto_increment PK):

SELECT MIN (id), MAX (id) FROM tablename;

Получить результат в $ a

// php код

$ id = rand ($ a [0], $ a [1]);

SELECT * FROM tablename, где id> = '$ id' LIMIT 1

...