@viktorross

Как быстро вытащить рандомную запись из бд?

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

select `id`,`title` from `class_ads` where `active`='1' ORDER BY RAND() limit 1


но этот запрос занимает больше чем пол секунды, т.к записей в базе очень много, как ускорить это? вариант с получением общего количества записей и получением между ним и 1 любого числа , а затем подставкой этого числа в where мне не подойдет..
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 3
kawabanga
@kawabanga
как вариант:

1) извлекаете count(id) всей таблицы, записываете временно в кэш.
2) используете rand(1, $count) для получения уникальной записи
3) получаете по первичному ключу вашу запись.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ написан
Комментировать
isset89
@isset89
Врёшь, тебе нравится
SELECT value
FROM table1 AS r1 JOIN
(
SELECT (RAND() * (SELECT MAX(id) FROM table1)) AS id
)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы