Использование RAND () в MySQL для получения одной случайной строки из огромной таблицы очень медленное:
SELECT quote FROM quotes ORDER BY RAND() LIMIT 1
Вот статья об этой проблеме и почемуслучай.
Их решение состоит в том, чтобы использовать два запроса:
SELECT COUNT(*) AS cnt FROM quotes
- Use result to generate a number between 0 and COUNT(*)
SELECT quote FROM quotes LIMIT $generated_number, 1
Мне было интересно, будет ли это возможно только в одном запросе.
Так что мой подход был:
SELECT * FROM quotes
LIMIT (
ROUND(
(SELECT COUNT(*) FROM quotes) * RAND()
)
), 1
Но в MySQL он не допускает никакой логики в пределах Limit.Хотя я не могу найти никакой информации по этой теме, правда ли это.
Итак, мои вопросы:
- Как я могу использовать RAND () в LIMIT?
- Знаете ли вы какой-либо другой способ решить эту проблему всего одним запросом?